解決發郵件出現“501Domainaddressrequired:HELO”問題

技術小胖子發表於2017-11-03

今天出現了一個奇怪的問題,產品機A上有一個郵件伺服器,產品機A和產品機B的java程式都是用A上的郵件伺服器發郵件,但是測試發現,產品機B上的java程式傳送郵件正常,而產品機A上的java程式傳送不出去,更奇怪的是A上的php程式也能夠傳送郵件!

查到tomcat日誌如下:
 

  1. javax.mail.MessagingException: 501 Domain address required: HELO  
  2. at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481)  
  3. at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:917)  
  4. at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:417)  
  5. at javax.mail.Service.connect(Service.java:288)  
  6. at javax.mail.Service.connect(Service.java:169)  
  7. at 


比較了A和B的java程式,完全一模一樣。
查了半天百度,google都沒有結果
最後找到了一個說法是因為hostname引起的,於是我用hostname命令查到了A的hostname是PRODA,而ping 它卻是沒有結果,看了一下/etc/hosts檔案中,發現“127.0.0.1 PROD-A”,寫多了一槓


 
改好之後再測試就能夠傳送了
我估計雖然傳的是server的域名,但是mail.jar會先獲取本機的hostname進行解析,解析不到就不傳送HELO命令了,但是Server需要檢測這個命令。而php的發郵件程式實現時不判斷hostname就直接傳送HELO命令,因此能夠傳送成功
     本文轉自yifangyou 51CTO部落格,原文連結:http://blog.51cto.com/yifangyou/1045819,如需轉載請自行聯絡原作者


相關文章