1. 程式人生 > >使用JavaMail發郵件問題

使用JavaMail發郵件問題

一、郵件發不成功出錯javax.mail.SendFailedException: Sending failed
告警郵件通知日誌中報錯,請幫忙分析是什麼問題?
詳細資訊如下:
2012/07/05 14:38:53 ERROR MailNotifyEntry  mail error!
javax.mail.SendFailedException: Sending failed;
  nested exception is:
        class javax.mail.MessagingException: 550 Invalid User
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at com.fault.notify.MailNotifyEntry.sendMail(MailNotifyEntry.java:476)
        at com.fault.notify.MailNotifyEntry.doNotify(MailNotifyEntry.java:262)
        at com.fault.notify.MailNotifyServer$ContextProcessor.run(MailNotifyServer.java:158)
 
或者:
javax.mail.SendFailedException: Sending failed; nested exception is:
     class javax.mail.MessagingException: 555 syntax error (eyou mta) 
     at javax.mail.Transport.send0(Transport.java:218) 
     at javax.mail.Transport.send(Transport.java:80) 
     at com.fault.notify.MailNotifyEntry$OneMailProcessRunnable.run(MailNotifyEntry.java:467) 
     at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743) 
     at java.lang.Thread.run(Thread.java:637)
 
結論:
  配置郵件通知規則的輸出設定引數時,mail.from的值沒有填寫,或者填寫不對,不是正確的郵件服務的使用者名稱。
   
  
  
  
  二、郵件傳送AuthenticationFailedException錯誤
  在用JavaMail發郵件時,如果郵件傳送不成功有如下日誌輸出:

012/06/11 11:24:03 ERROR MailNotifyEntry  mail error!
javax.mail.SendFailedException: Sending failed;
  nested exception is:
        class javax.mail.AuthenticationFailedException
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at com.fault.notify.MailNotifyEntry.sendMail(MailNotifyEntry.java:476)
        at com.fault.notify.MailNotifyEntry.doNotify(MailNotifyEntry.java:262)
        at com.fault.notify.MailNotifyServer$ContextProcessor.run(MailNotifyServer.java:158)

出錯日誌提示:class javax.mail.AuthenticationFailedException

查詢JavaMail資料,這個異常的解釋是“This exception is thrown when the connect method on a Store or Transport object fails due to an authentication failure (e.g., bad user name or password)”

所以需要檢查登入郵件伺服器的使用者名稱、密碼是否正確。

另外,傳送郵件時預設使用的郵件服務埠號是25,如果不是使用預設埠25,可通過mail.smtp.port引數設定上引數值。

預設是25,如果郵件服務不是25,給定了其它埠號,要在NMS的郵件通知規則的通知設定中新增上,例如 引數名mail.smtp.port,引數值123


參考 http://www.websina.com/bugzero/kb/sunmail-properties.html

mail.smtp.port:The SMTP server port to connect to, if the connect() method doesn't explicitly specify one. Defaults to 25.

 
另外,要保證與郵件服器的110,25埠是通的,可在傳送郵件的伺服器上telnet 郵件伺服器的這兩個埠驗證下,保證埠要通。

關於郵件服務埠的參考如下:

    25埠(SMTP):25埠為SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議)服務所開放的,是用於傳送郵件。如今絕大多數郵件伺服器都使用該協議。當你給別人傳送郵件時,你的機器的某個動態埠(大於1024)就會與郵件伺服器的25號埠建立一個連線,你傳送的郵件就會通過這個連線傳送到郵件伺服器上,儲存起來。

  109埠(POP2):109埠是為POP2(Post Office Protocol Version 2,郵局協議2)服務開放的,是用於接收郵件的。

  110埠(POP3):110埠是為POP3(Post Office Protocol Version 3,郵局協議3)服務開放的,是用於接收郵件的。

  143埠(IMAP):143埠是為IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服務開放的,是用於接收郵件的。