将一项服务迁移到 Spring-Boot 3.1.1 后,我们在发送电子邮件时看到错误,而以前没有出现过这种错误。
此错误自迁移以来引发,与 SMTP 服务器上的任何证书问题无关(已检查,如果使用以前的版本,它会再次工作)。
我们使用Java17和spring-boot-starter-parent v3.1.1。
2023-08-18 11:31:05.560 ERROR 78703 --- [ntContainer#0-1] c.d.s.portal.service.EmailService : An error has occurred while sending the mail
org.springframework.mail.MailSendException: Mail server connection failed. Failed messages: jakarta.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
java.io.IOException: Can't verify identity of server: my-smtp-server
Caused by: jakarta.mail.MessagingException: Could not convert socket to TLS
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2189)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:766)
at jakarta.mail.Service.connect(Service.java:342)
at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:518)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:437)
... 46 common frames omitted
Caused by: java.io.IOException: Can't verify identity of server: my-smtp-server
at com.sun.mail.util.SocketFetcher.checkServerIdentity(SocketFetcher.java:699)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:636)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:555)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:2184)
... 50 common frames omitted
我已经尝试了以下帖子中的一些建议
我什至尝试将
org.springframework.mail.javamail.JavaMailSender
的使用更改为org.springframework.mail.MailSender
没有结果,因为同样的错误一次又一次出现。
您知道为什么迁移到 SB v3.x 会导致该服务器识别失败吗? 我们对另一项服务还有另一个问题,现在这两个问题似乎都与 SB 内部 SSL 使用的变化有关(也可能不是)。
我也遇到了完全相同的问题。据我检查,默认情况下
mail.smtp.ssl.checkserveridentity
是 false
。现在 3.1 看起来默认是 true
。我再次将其设置为 false 并工作。当然,对于中间人攻击来说,它并不安全。