2012-10-16 49 views
0

我正在嘗試使用Java應用程序連接到Mercury郵件服務器,並且正在使用JavaMail API。該連接不成功,我在日誌中收到此錯誤:Mercury郵件服務器的JavaMail API連接錯誤

EHLO XXXX
554無效HELO格式

這意味着它連接到服務器,但直升機格式是不是喜歡斷絕東西。我已經厭倦了調試它,並且我在JavaMail「SMTPTransport」類中得到了以下代碼:

serverOutput.write(cmdBytes);
serverOutput.write(CRLF);
serverOutput.flush();私人靜態最終字節[] CRLF = {(byte)'\ r',(byte)'\ n'};}}
這似乎符合RFC 821

我知道在Windows \ n有不同的含義,如果不是,那麼可能會導致這種情況? 我與郵件客戶端檢查郵件服務器,它工作正常,我檢查與詹姆斯郵件服務器的代碼,它也工作正常!

的JavaMail API版本:1.4.5(最新版本)
汞/ 32:4.7

+0

如何配置了關於驗證客戶端的主機名水星服務器? EHLO的參數應該是客戶端的fqdn(但如果沒有fqdn可用,可以是客戶端的IP)。 Mercury服務器可能被設置爲驗證客戶端上的反向DNS和/或拒絕不可路由的客戶端地址。最好的選擇是使用Wireshark從工作客戶端捕獲一個會話,並與失敗的會話進行比較。 –

+0

另外,'serverOutput'的編碼定義是什麼?如果它不是二進制的,那麼你實際上可能正在發送CR-CR-LF,這可能是一個問題。 –

+0

關於serverOutput我不確定它是如何工作的我不能進入源代碼,因爲我提到它是JavaMail API包的一部分,但我同意你的觀點,並在我的帖子中提到我懷疑這個CRLF可能是CR CR LF如你所說 –

回答

0

您可能需要檢查日誌服務器上找出它的真正抱怨,但是...您可以嘗試的一件事是將mail.stmp.localhost屬性設置爲您計算機的正確DNS主機名。在調試輸出中,它看起來像您的機器無法確定自己的名稱,所以發送的是IP地址。

+0

這是從服務器的日誌,服務器的應用程序都在本地主機上,我認爲IP是客戶端IP而不是服務器在這裏! EHLO是來自客戶端,它發佈它的IP,我使用127.0.0。1但同樣的事件 –

+0

就郵件服務器而言,您的應用程序是客戶端。 EHLO命令應該包含客戶端機器的主機名,在您的情況下,可以是「localhost」或客戶端/服務器計算機上的真實DNS名稱。 「127.0.0.1」不是主機名,它是一個IP地址。將該屬性設置爲實際的主機名。 –