在项目里面使用javamail在window环境正常,放在服务器上面的时候抛出异常javax.mail.MessagingException: 501 Syntax: HELO hostname ,原因是在linux无法解析邮件服务器名称为ip地址,解决方法有二种:
第一种,在linux服务器上面,/etc/hosts
12 | 127.0.0.1 ::1 |
第二种,在java代码里面配置 props.put("mail.smtp.localhost", "127.0.0.1");这事关键的地方~!
props.put(
"mail.smtp.localhost"
, Mail._PC_IP);
pro.put("mail.smtp.localhost", "localHostAdress");
2.2 javax.mail.messagingexception: 501 syntax: helo hostname
在本地测试通过后,我部署到linux服务器中,但是去碰到了javax.mail.messagingexception: 501 syntax: helo hostname异常, google了发现是以下原因:
javamail 在提取本地 hostname 地时候会 dig 改 hostname ,然后以改 ip 发送邮件.
由于 hostname 对应地 ip 地址, linux 无法解析(如果是 windows 则无这个问题, windows 利用 netbios 协议去获的该主机地 ip 地址)到本机 hostname 地 ip ,导致 javamail 无法调用发送 ip . postfix 收到此类邮件将拒绝投递,而产生 501 错误.
网上说可以通过修改服务器地hosts文件解决,但是我发现还可以直接在代码里面解决(只需要加一行代码,这大大方便啊),即在setsmtphost()方法中,增加下面一行:
代码如下:props.put(mail.smtp.localhost, localhostadress);
2.3 附件中文名乱码
如果附件有中文名,直接setname()会乱码,通过下面地方法可以解决:
mbp.setfilename(mimeutility.encodetext(name,utf-8,b));