解决方法一:
MimeUtility.encodeText(attach.getName())
法二:
MimeUtility.encodeText(name, "UTF-8", "B"),
* 格式化 Name 的地址
* @param name 名字
* @param email Email地址
* @return 格式化的地址
*/
public static String formatAddress(String name, String email) {
if (StringHelper.isNullOrEmpty(name)) {
return email;
}
try {
return String.format("%1$s <%2$s>", MimeUtility.encodeText(name, "UTF-8", "B"), email);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return email;
}
上面的函数用来格式化一个类似 Name 的收件人或发件人地址。
解决名字乱码主要是其中一句:
MimeUtility.encodeText(name, "UTF-8", "B")
由于Email的规范,在smtp传输中不可使用中文字符。所以可以使用内置类的 MimeUtility方法 encodeText将收件人、发件人名字编码即可。编码方式有两种:"B"代表Base64、"Q"代表 QP(quoted-printable)方式。
注意:不能将名字和email地址一起编码,如直接编码 "Name " 后当做收件人就会出错。
注意:Mail的Subject和Content不需要我们显式的编码,在Set的时候这两项会被javax.mail自动编码。