最近有用户反馈在mac下通过airmail、outlook这样的邮件客户端查看系统发出邮件的标题显示为乱码,但是windows下正常。
通过邮件客户端保存为eml,用sublime text 2打开,可以发现展示为以下效果:
Date: Wed, 01 Jul 2015 19:54:57 +0800
From:
To: "=?GBK?B?zt6+zA==?="
Subject: [MTLÑз¢Ö§³Å] ÏîĿ״̬֪ͨ
X-Mailer: smtp-cli 3.6, see http://smtp-cli.logix.cz
Message-Id: 1435751697-132512@smtp-cli
Subject直接传入了中文内容,不符合邮件MIME规范。windows显示正常,不过是因为系统本身良好的兼容性而已。
想要编码相应的文字,只需要按照以下格式:
=?charset?encoding?encoded text?=
encoding有两个可选值:Q和B,前者表示QP编码(Quoted-printable),后者为BASE64编码。
我们选择BASE64作为编码方案,处理一下Subject:
privateString encodeSubject(String subject) {byte[] base64 =org.apache.commons.codec.binary.Base64.encodeBase64(subject.getBytes());return String.format("=?UTF-8?B?%s?=", newString(base64));
}
经过这么处理,发送出去的邮件中的Subject不再是中文,乱码问题也就随之解决。
[参考资料]
https://en.wikipedia.org/wiki/MIME
有用户反馈Mac下用Airmail、Outlook邮件客户端查看系统发出邮件标题乱码,Windows下正常。原因是Subject直接传入中文,不符合邮件MIME规范。可按特定格式编码文字,选择BASE64编码方案处理Subject,能解决乱码问题。
2366

被折叠的 条评论
为什么被折叠?



