Java使用javax.mail发送邮件 解决收件人、发件人名字乱码问题

/**
* 格式化 Name <email@address.com> 的地址
* @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 <email@test.com> 的收件人或发件人地址。
解决名字乱码主要是其中一句:
MimeUtility.encodeText(name, "UTF-8", "B")

由于Email的规范,在smtp传输中不可使用中文字符。所以可以使用内置类的MimeUtility方法encodeText将收件人、发件人名字编码即可。编码方式有两种:"B"代表Base64、"Q"代表QP(quoted-printable)方式。
注意:不能将名字和email地址一起编码,如直接编码 "Name <email@test.com>" 后当做收件人就会出错。
注意:Mail的Subject和Content不需要我们显式的编码,在Set的时候这两项会被javax.mail自动编码。

上面的编码中指定了"UTF-8"字符集,是因为我的来源字符串在DB或者.properties文件中的都是UTF-8编码存储的。如果您的来源字符串字符集不一致,请修改成相应的。(直接写在源代码中的中文编码是"iso-8859-1")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值