javax.mail.MessagingException: 501 5.0.0 HELO requires domain address

最近javaIP地址抛异常。 经查询发现   /etc/hosts 没有配置 hostname   导致hostname 无法解析到IP地址

否则 java.net.InetAddress.getLocalHost  会抛出 java.net.UnknownHostException 异常。

 

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

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

由于 hostname 对应的 ip 地址, linux 无法解析(如果是 windows 则无这个问题, windows 利用 netbios 协议去获得该主机的 ip 地址)到本机 hostname 的 ip ,导致 javamail 无法调用发送 ip 。  

解决办法:

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

 如自己在code里面set写localhost:

MimeMessage message = null;

props.put("mail.smtp.host", "mail.pccw.com");
      props.put("mail.smtp.localhost", "localHostAdress");

props.put("mail.smtp.port", "25");

props.put("mail.smtp.auth", "false");

message =  new MimeMessage(sendsession);

 

如上面加背景色的代码就可以解决这个问题。


PS:
这个错误的javamail 在发送helo 命令的时候找不到 hostname,直接发送helo命令
所以postfix返回了 501 Syntax: HELO hostname
 
javamail 首先会按顺序从下面两个key从session里找 hostname
mail.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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值