簡體   English   中英

Java Mail超時和連接超時處理

[英]Java Mail timeout & connectiontimeout handling

我正在使用JavaMail將電子郵件請求發送到SMTP服務器。

我想在我的代碼中同時設置“ mail.smtp.connectiontimeout”“ mail.smtp.timeout”屬性。

以編程方式,我想同時捕獲Java中的超時和/或連接 超時操作,並相應地進行處理。 從某種意義上講,我下次需要再次重試同一封電子郵件。

如何在Java / JavaMail中處理此問題? 是否有可能捕獲並處理此超時操作?

編輯

另外,假設我已經完成對SMTP服務器的管理訪問權限,是否可以自己模擬/重現此超時操作?

回答您的第二個問題:在測試計算機上,只需使用iptables丟棄與SMTP服務器的所有傳出連接:

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

這樣,它看起來確實像是無響應的smtp服務器,並且您可以測試異常處理。

所有:

我自己經歷了這個問題之后,正在回答我的問題。

如何在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服務器的管理訪問權限,是否可以自己模擬/重現此超時操作?

有專家意見嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM