解決JavaMail發送郵件,主題亂碼現象

在項目中使用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服務器收到的郵件都正常了

至此解決此問題

發佈了17 篇原創文章 · 獲贊 12 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章