2009年3月4日 星期三

550 5.7.1 Unable to relay

使用JAVAMAIL寄信,結果出現下列錯誤
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class javax.mail.SendFailedException: 550 5.7.1 Unable to relay

意思就是你的mail server不允許你經由它寄送外部郵件,寄送內部郵件應該沒問題啦,反正應該是驗證的問題囉,不是你程式裡沒有設定要驗證就是mail server不讓你驗證,所以請檢查發送mail的程式裡有沒有啟用驗證囉,有啟用通常會用到帳號密碼囉,不過像我的情況是,該系統被加入relay清單裡,exchange似乎強制不讓我驗證,就算程式有驗證也沒用,解決辦法就是請管理者幫你把該系統從relay清單移除,然後AP server記得重啟或AP重新部署,有時不這麼作,會有cache造成怪怪的問題喔!!

可參考javamail的FAQ,有相關說明
When I try to send a message, why do I get javax.mail.SendFailedException: 550 Unable to relay for my-address?

其實若使用JAVAMAIL寄信發生問題,我發現開啟debug模式去看與mail server通訊的細節,會比較清楚問題發生在哪喔,附上debug模式的記錄,其中綠字是我的補充說明囉

以DEBUG為開頭表示是JavaMail run-time印出來的

此次mail session所使用的Provider
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]

SMTP所使用的參數設定,這邊要注意useAuth是"true"還是"false","true"代表程式有啟用驗證,"false"代表沒有啟用,但是有例外的情況,有時程式明明有啟用,但是這裡還是顯示"false",表示mail server可能不讓你驗證喔,像exchange的話,若系統在relay清單裡,程式有設驗證也沒用喔,這時寄外部郵件會有問題,這是我自己測試很多次得來的結論
DEBUG SMTP: useEhlo true, useAuth false

這裡是顯示試圖連接mail.test.com.tw的25port
DEBUG SMTP: trying to connect to host "mailt.test.com.tw", port 25
這裡就表是已連接到囉,網路是通的
220 HCS03.mail.local Microsoft ESMTP MAIL Service ready at Fri, 20 Feb 2009 11:51:17 +0800
DEBUG SMTP: connected to host "mailt.test.com.tw", port: 25
使伺服器可以表明自己支援擴展簡單郵件傳輸協定 (ESMTP) 命令
EHLO sva511

250-HCS03.mail.local Hello [192.168.107.2]

下面就是支援哪些命令囉
250-SIZE 10485760

250-PIPELINING
250-DSN

250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS

250-AUTH NTLM LOGIN

250-X-EXPS GSSAPI NTLM

250-8BITMIME

250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XRDST
DEBUG SMTP: Found extension "SIZE", arg "10485760"
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "X-ANONYMOUSTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "NTLM LOGIN"
DEBUG SMTP: Found extension "X-EXPS", arg "GSSAPI NTLM"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "BINARYMIME", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "XEXCH50", arg ""
DEBUG SMTP: Found extension "XRDST", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:< sender@test.com.tw >

寄件者ok
250 2.1.0 Sender OK
RCPT TO:< receiver22@yahoo.com >

無法幫你轉信給該寄件者
550 5.7.1 Unable to relay
DEBUG SMTP: Invalid Addresses
DEBUG SMTP: receiver22@yahoo.com
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
250 2.0.0 Resetting

1 則留言:

  1. 最近剛好在處理java mail的東西

    也是有同樣的問題

    非常感謝您分享的這篇文章

    謝謝:)

    回覆刪除