javax.mail.MessagingException: 501 Syntax: HELO hostname Linux端异常解决

时间:2022-12-12 18:09:02

在项目里面使用javamail在window环境正常,放在服务器上面的时候抛出异常javax.mail.MessagingException: 501 Syntax: HELO hostname ,原因是在linux无法解析邮件服务器名称为ip地址,解决方法有二种:

第一种,在linux服务器上面,/etc/hosts

12 127.0.0.1      
localhost 
::1            
localhost6.localdomain6 localhost6

 

第二种,在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));