Java邮件超时和连接超时处理

6
我正在使用JavaMail向SMTP服务器发送电子邮件请求。
我想在代码中设置"mail.smtp.connectiontimeout"和"mail.smtp.timeout"两个属性。
通过编程的方式,我想在Java中捕获timeout和/或connectiontimeout操作,并相应地处理。处理的意思是,我需要在下次重试相同的电子邮件时再次发送它。
如何在Java / JavaMail中处理这个问题?是否有可能捕获和处理这些timeout操作?
另外,如果我完全掌握SMTP服务器的管理权限,是否有可能模拟/复制这个timeout操作?
2个回答

7
回答你的第二个问题:在你的测试机上,使用iptables删除所有向SMTP服务器的传出连接即可。
   iptables -I OUTPUT 1 -p tcp -s 192.168.1.20 --dport 25 -j DROP

这样看起来就像是一个无响应的SMTP服务器,您可以测试异常处理。


感谢您提供的模拟步骤。我会尝试一下。 - Gnanam

3

大家好:

在自己的实践中,我回答了自己的问题。

如何在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();

我现在唯一的问题是:“如果我有完全的管理访问权限,是否可能模拟/重现此超时操作?

专家们有什么想法吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接