我正在使用JavaMail向SMTP服务器发送电子邮件请求。
我想在我的代码中设置“mail.smtp.connectiontimeout”和“mail.smtp.timeout”属性。
以编程方式,我希望在Java中达到 timeout 和/或 connectiontimeout 操作并同时处理事务时捕获这两者。从某种意义上讲,我需要在下次再次重试相同的电子邮件。
如何在Java / JavaMail中处理此问题?有可能赶上&处理这个超时操作?
修改
此外,假设我已完成对SMTP服务器的管理访问,是否可以自行模拟/重现此超时操作?
答案 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服务器的管理访问权限,是否可以自行模拟/重现此超时操作?”
来自专家的任何想法?