[英]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.