如果默认超时值是无限的,为什么会有连接超时异常?

时间:2016-06-18 13:56:44

标签: spring javamail connection-timeout

使用spring JavaMailSender发送电子邮件,有时会出现以下异常

org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: mail.foo.com, 25; timeout -1;
nested exception is:
java.net.ConnectException: Connection timed out. Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: mail.foo.com, 25; timeout -1;
  nested exception is:
java.net.ConnectException: Connection timed out
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:432) ~[spring-context-support-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) ~[spring-context-support-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340) ~[spring-context-support-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]

起初我认为默认超时可能不够长,我可以设置更长的值来避免异常。 e.g。

<prop key="mail.smtp.timeout">10000</prop>

但是当我阅读文档时,我发现defalt超时值为infinite enter image description here

请参阅:https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html

所以,如果它是无限的,它应该永远被阻止,为什么可能有ConnectException

1 个答案:

答案 0 :(得分:1)

由于您的问题更多的是为什么在时获得Connection timed out ,因此默认超时值为无限;我的2美分将是查看操作系统的连接超时值。要在linux中检查或修改它(我认为默认为20秒),你可以看一下:How to view/change socket connection timeout on Linux?

即使您正在使用任何其他操作系统,您也应该能够了解如何检查或修改该值。

然而,这只会回答您的问题而解决您的问题。要解决您的问题,您需要查看不同的连接失败原因(由Roman C提供的链接中提供)并检查出现了什么问题。最常见的是你使用http / https而服务器允许另一个,或者如果它不是服务器端的防火墙问题,则存在一些端口或URL问题。