2010-05-05 242 views
5

我正在使用JavaMail將電子郵件請求發送到SMTP服務器。Java郵件超時和連接超時處理

我想我的代碼中設置兩個「mail.smtp.connectiontimeout」「mail.smtp.timeout」性能。

編程,我要趕在這兩個超時 /或connectiontimeout操作在Java中均達到並相應地處理事情。從某種意義上說,我需要在下次再次嘗試使用同一封電子郵件。

如何在Java/JavaMail中處理此問題?處理這個超時操作是否有可能趕上&?

編輯

而且,是能夠模擬/重現我自己的超時操作假設我已經到SMTP服務器的完整管理訪問權限?

回答

4

回答你的第二個問題:在您的測試機只需拖放到你的SMTP服務器的所有出站連接使用iptables:

iptables -I OUTPUT 1 -p tcp -s 192.168.1.20 --dport 25 -j DROP 

這樣它看起來像一個反應遲鈍的SMTP服務器,你可以測試你的異常處理。

+0

感謝您的模擬步驟。我會嘗試的。 – Gnanam 2010-09-24 14:00:41

1

所有:

我回答我的問題,遇到此我自己了。

如何在Java/JavaMail中處理此問題? 是否有可能趕上&處理這個 超時操作?

是的,它自動拋出爲javax.mail.MessagingException

javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
     java.net.SocketTimeoutException: Read timed out 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462) 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370) 
     at javax.mail.Service.connect(Service.java:297) 
     at javax.mail.Service.connect(Service.java:156) 
     at javax.mail.Service.connect(Service.java:105) 

此異常在該線正好拋出:

Transport.connect();

只有開放的問題我現在已經是「是否可以模擬/重現我自己的超時操作假設我已經到SMTP服務器的完整管理權限?

從任何想法專家?