【发布时间】:2021-12-11 22:03:35
【问题描述】:
使用 JavaMail 发送电子邮件时,我收到此异常:
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake. Failed messages: javax.mail.MessagingException: Can't send command to SMTP host;
我使用的是 Tomcat 8,其中添加了这些参数:
-Dcatalina.home=C:\Development\apache-tomcat-8.5.12
-Dcatalina.base=C:\Development\apache-tomcat-8.5.12
-Djava.io.tmpdir=C:\Development\apache-tomcat-8.5.12\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Development\apache-tomcat-8.5.12\conf\logging.properties
-XX:PermSize=128m
-XX:MaxPermSize=512m
-XX:+CMSClassUnloadingEnabled
-XX:+UseG1GC
-Dmail.smtp.starttls.enable=true
-Dmail.debug=true
-Dhttps.protocols=TLSv1.1,TLSv1.2
我的 java 邮件属性是:
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.debug">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
我正在使用 Spring Java Mail v.3.2.2。
最奇怪的是,这种配置多年来一直正常工作,但现在突然之间大约 80% 的电子邮件因此而无法发送。但是,其他 20% 的电子邮件照常发送。
我查看了远程服务器中的配置,没有任何更改。
【问题讨论】:
-
什么都没有改变——除了时间过去了!? (证书过期/续订!?;)您好,欢迎来到Stack Overflow!
-
您可能希望启用 SSL 调试以查看那里是否显示任何内容。同时与您的 SMTP 服务器的系统管理员联系。
-
-Djavax.net.debug=ssl:handshake的第二个动议。什么java版本? Tomcat 8.5 可以在 7 上运行,这是 PermGen 的最后一个版本,至少免费版本 7(通过 7u80)默认禁用 1.0 以上的 TLS 客户端协议,而今天的许多服务器需要 1.1 甚至 1.2 最低,因为 1.0 是如果不是彻底破了,至少严重削弱了。注意https.protocols对邮件完全没有影响,邮件不使用HTTP[S];如果您打算为 SMTP 配置 TLS 版本,请使用mail.smtp.ssl.protocols
标签: java jakarta-mail tomcat8 sslhandshakeexception starttls