Java Mail超时& connectiontimeout处理

时间:2010-05-05 12:26:20

标签: java exception exception-handling email javamail

我正在使用JavaMail向SMTP服务器发送电子邮件请求。

我想在我的代码中设置“mail.smtp.connectiontimeout”“mail.smtp.timeout”属性。

以编程方式,我希望在Java中达到 timeout 和/或 connectiontimeout 操作并同时处理事务时捕获这两者。从某种意义上讲,我需要在下次再次重试相同的电子邮件。

如何在Java / JavaMail中处理此问题?有可能赶上&处理这个超时操作?

修改

此外,假设我已完成对SMTP服务器的管理访问,是否可以自行模拟/重现此超时操作?

2 个答案:

答案 0 :(得分:4)

回答第二个问题:在您的测试计算机上,只需使用iptables DROP与SMTP服务器的所有传出连接:

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

这样看起来就像一个没有响应的smtp服务器,你可以测试你的异常处理。

答案 1 :(得分: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服务器的管理访问权限,是否可以自行模拟/重现此超时操作?

来自专家的任何想法?