javax.mail.MessagingException: 501

本文探讨了JavaMail在发送邮件过程中遇到501 Syntax: HELO的问题及其原因,并提供了解决方案,包括更新hosts文件或DNS设置。

Mail server connection failed; nested exception is javax.mail.MessagingException: 501 Syntax: HELO

出现这个问题,是系统利用javamail组件发送邮件,

Javamail在提取本地hostname的时候会dig 改hostname,然后以改ip发送邮件。

由于hostname对应的ip地址,linux无法解析(如果是windows则无这个问题,windows利用netbios协议去获得该主机的ip地址)到本机hostname的ip,导致javamail无法调用发送ip。Postfix收到此类邮件将拒绝投递,而产生501错误。

 

解决办法:

在有利用到javamail的所有主机重写hosts文件或者在dns服务器上设置该主机名的ip就可以解决这个问题。

 

 



这个错误的javamail 在发送helo 命令的时候找不到 hostname,直接发送helo命令所以postfix返回了 501 Syntax: HELO hostname  javamail 首先会按顺序从下面两个key从session里找 hostnamemail.smtp.localhost mail.smtp.localaddress  找不到的话会使用 InetAddress.getLocalHost() 得到 一个InetAddress 对象再getCanonicalHostName()在修改hosts之前呢,InetAddress.getLocalHost() 会抛出 Exception in thread "main" java.net.UnknownHostException: ui41.greenemls.org: ui41.greenemls.org        at java.net.InetAddress.getLocalHost(InetAddress.java:1353)这个异常,然后返回null也就是说不改的话,不单是邮件发不出去,如果有其他地方可能用到InetAddress.getLocalHost()的方法都可能抛出UnknownHostException  另外把javamail升级到1.4.3就可以的原因是在1.4.3的javamail 里,会catch UnknownHostException 并根据当前跟smtp创建socket所使用的ip getCanonicalHostName()得到hostname但是这个得到的hostname 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值