用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 中 还是乱码.