用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 中 還是亂碼.