最近有用戶反饋在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:
private String encodeSubject(String subject) { byte[] base64 = org.apache.commons.codec.binary.Base64.encodeBase64(subject.getBytes()); return String.format("=?UTF-8?B?%s?=", new String(base64)); }
經過這么處理,發送出去的郵件中的Subject不再是中文,亂碼問題也就隨之解決。
[參考資料]
https://en.wikipedia.org/wiki/MIME
