2010-05-05 246 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服务器的完整管理权限?

从任何想法专家?