spring javamail發郵件附件中文名亂碼的解決方案總結

 

用spring javamial發郵件的時候,附件中文名亂碼的解決方法,大家熟知的應該是MimeUtility.encodeWord(),沒錯,使用這個方法在foxmail客戶端上收郵件中文附件名可以正常展現了,但在個別的outl express 中, 還是亂碼.反覆切換outlook的編碼方式,發現設置爲"GB2312"的時候,附件名的中文不亂碼了.但郵件主題,正文卻亂了. 看來這個outlook express 對於郵件正文和附件名的編碼方式是有區別的.

解決辦法:
 選中亂碼的郵件,右鍵郵件屬性,查看詳細信息中的 郵件原信息.Message-ID: <18283318.809.1323831620505.JavaMail.weblogic@RP8407PS>
Subject: =?utf-8?B?5Liq6LS36aOO6Zmp566h55CG57O757uf6L+Q6KGM5pel5oqlMjAxMeW5tDEy?=
 =?utf-8?B?5pyIMTPml6Uo5q2k6YKu5Lu25Li6?=

這段代碼表示郵件主題是用 utf-8的編碼方式 也就是通知郵件客戶端使用何種編碼方式顯示郵件內容
繼續往下 ------=_Part_808_27391340.1323831620456
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;charset=utf-8

這段代碼表示郵件正文也是用 utf-8的編碼方式.也就是通知郵件客戶端使用何種編碼方式顯示郵件內容 (在用foxm客戶端收郵件的時候,最方便是把編碼方式設置爲自動,foxma會自動選擇合適的編碼方式才顯示郵件)
這兩個地方的設置,在spring 的javamail中的一個地方就可以設置
MimeMessageHelper helper = new MimeMessageHelper(msg, true, "UTF-8");

繼續往下
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3DUTF-8"></head>

如果郵件正文只是用普通的文本,而不是HTML 可以跳過這段

這段代碼表示郵件正文中的html中的編碼方式也是UTF-8

只要保證這兩個地方編碼方式一致,就可以保證郵件主題,正文和附件名都能正常顯示中文名.

 


總結:
 這裏只討論GBK和UTF-8兩種編碼方式
亂碼的原因 郵件內容使用的是GBK的編碼方式,但客戶端展現的時候卻使用了UTF-8,那肯定亂碼,反過來也一樣.

總之foxmail對中文的支持比outlook 要好很多,建議大家還是使用foxmail吧.爲了解決這個outlook 附件名亂碼的問題折騰了我整整兩天啊!


 

用spring javamial發郵件的時候,附件中文名亂碼的解決方法,大家熟知的應該是MimeUtility.encodeWord(),沒錯,使用這個方法在foxmail客戶端上收郵件中文附件名可以正常展現了,但在個別的outl express 中 還是亂碼.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章