您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发
【原】javax mail发送邮件设置发件人中文名称,解决中文乱码问题
不忘初心 2019-08-11 围观() 评论() 点赞() 【JAVA开发】
简介:使用java mail发送邮件,如何为发件人设置中文名称?java发送邮件时,发件人中文名字乱码该如何解决?Java使用javax.mail发送邮件,解决收件人、发件人名字乱码问题。
之前写了java发送邮件的教程,但是最近在使用的时候,发现了一点儿美中不足,发送邮件的时候,没有指定名字的功能,对方收到邮件时,在邮箱中看到的直接是发送者的邮件地址,虽然问题不大,但是有时候涉及到系统发送的场景时,应该以品牌名作为发送者名字,比如“积微成著”。
查阅了一下资料,发现问题其实很简单,只需要在发送者邮箱之前加上名字就行了(如:剑圣 <jiansheng@qq.com>),好了,不多哔哔,直接上代码了。
public static void sendTextEmail(String receiver, String subject, String content) {
try {
// 得到会话对象
Session session = Session.getInstance(properties());
// 获取邮件对象
Message message = new MimeMessage(session);
// 设置发件人邮箱地址(尖括号前面需要一个空格)
message.setFrom(new InternetAddress("剑圣 <" + sender + ">"));
...
} catch (Exception e) {
log.error("发送QQ邮件失败:{}", ExceptionUtils.getStackTrace(e));
}
}
上述代码的写法是没有问题的,但是涉及到了中文就会有乱码,进而就会导致邮箱地址解析失败:
2019-08-10 23:21:45.177 ERROR 14340 --- [ Thread-25] com.wolffy.reader.util.QQMailUtil : 发送QQ邮件失败:javax.mail.AuthenticationFailedException: 535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:965)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:876)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:780)
at javax.mail.Service.connect(Service.java:366)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:267)
at com.wolffy.reader.util.QQMailUtil.sendRichEmail(QQMailUtil.java:126)
at com.wolffy.reader.controller.ApplyController.notifyAdministrator(ApplyController.java:104)
at com.wolffy.reader.controller.ApplyController.lambda$insert$0(ApplyController.java:75)
at java.lang.Thread.run(Thread.java:748)
错误很清晰,就是乱码导致解析错误乱,进而鉴权失败,不过所幸官方已经提供了encode的api来帮我们处理这个问题。
乱码解决方法一:
message.setFrom(new InternetAddress(MimeUtility.encodeText("空悠悠") + " <" + sender + ">"));
利用MimeUtility.encodeText(),将中文先转码,然后再拼接上后面的邮箱地址,这样就可以了。
乱码解决方法二:
利用InternetAddress的构造函数,它除了提供单个参数的构造方法,还有几个可指定参数编码的构造方法。
/**
* Construct an InternetAddress given the address and personal name.
* The address is assumed to be a syntactically valid RFC822 address.
*
* @param address the address in RFC822 format
* @param personal the personal name
* @param charset the MIME charset for the name
* @exception UnsupportedEncodingException if the personal name
* can't be encoded in the given charset
*/
public InternetAddress(String address, String personal, String charset)
throws UnsupportedEncodingException {
this.address = address;
setPersonal(personal, charset);
}
第一个参数就不多说了,后面两个分别是用户名字和编码,非常的简洁:
message.setFrom(new InternetAddress(sender, "剑圣", "UTF-8"));
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
相关文章
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们