在項目中使用javamail發送郵件總是出現主題亂碼現象,而且主題使用了Base64進行了編碼,依舊如故。代碼如下:
// 根據session創建一個郵件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 創建郵件發送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設置郵件消息的發送者
mailMessage.setFrom(from);
// 創建郵件的接收者地址,並設置到郵件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO屬性表示接收者的類型爲TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 設置郵件消息的主題
//使用Bese64編碼郵件主題,防止亂碼
sun.misc.BASE64Encoder base64 = new BASE64Encoder();
String subject = new String(base64.encode((mailInfo.getSubject()).getBytes("UTF-8")));
//mailMessage.setSubject("=?UTF-8?B?" + subject + "?=");
mailMessage.setSubject(MimeUtility.encodeText(mailInfo.getSubject(), "UTF-8", "B"));
// mailMessage.setSubject(mailInfo.getSubject());
// 設置郵件消息發送的時間
mailMessage.setSentDate(new Date());
// MiniMultipart類是一個容器類,包含MimeBodyPart類型的對象
Multipart mainPart = new MimeMultipart();
// 創建一個包含HTML內容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 設置HTML內容
html.setContent(mailInfo.getContent(), "text/html; charset=UTF-8");
mainPart.addBodyPart(html);
// 將MiniMultipart對象設置爲郵件內容
mailMessage.setContent(mainPart);
// 發送郵件
Transport.send(mailMessage);
Google後找到一種解決方案,如紅色字體標識。按照這個方法測試後發現在兩臺redhat服務器上收到的郵件,一封正常,一封亂碼。很納悶,因爲兩臺服務器的配置是完全相同的。
之後使用了藍色字體部分的解決方案,兩臺Linux服務器收到的郵件都正常了
至此解決此問題