【发布时间】:2021-10-21 17:36:25
【问题描述】:
我正在尝试使用 JavaMailSender 在 Spring Boot 中发送邮件,但出现此错误:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate). Failed messages: javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
阅读后发现是因为我们使用的 TLSv1 或 TLSv1.1 已经过时了,我们应该使用 v1.2 或更高版本。我尝试在 application.yml 中添加值为 TLSv1.2 的 ssl.protocols 属性,但它似乎不起作用。这是我的 application.yml:
spring:
mail:
host: smtp.gmail.com
port: 587
username: ******@gmail.com
password: *******
protocol: smtp
tls: true
properties.mail.smtp:
auth: true
ssl.trust: smtp.gmail.com
starttls.required: true
starttls.enabled: true
ssl.protocols: TLSv1.2
这是发送邮件的方法:
public void sendEmail(String to, String subject, String body) {
logger.info("Sending mail to : " + to);
SimpleMailMessage mail = new SimpleMailMessage();
mail.setTo(to);
mail.setSubject(subject);
mail.setText(body);
try {
javaMailSender.send(mail);
logger.info("Mail sent to " + to);
} catch (Exception e) {
logger.error("Could not send mail to " + to + ". Exception : " + e.getMessage());
}
}
我更新了 JavaMailSender 版本,但没有解决问题。唯一可行的方法是按照this answer 中的建议从 jdk.tls.disabledAlgorithms 中删除 TLSv1 和 TLSv1.1,但这只是一个临时修复。如何让邮件发件人使用 TLSv1.2 或更高版本?我在 application.yml 中定义 ssl.protocols 属性的方式有什么问题吗?
这是我使用的java版本:
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
以及spring boot starter邮件版:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.5.3</version>
</dependency>
【问题讨论】:
-
是 starttls.enables: true 还是 starttls.enable: true 从 enable 中去掉 s
-
您可以添加 ssl.protocols : TLSv1.2 属性或 ssl.enable : false
-
我不相信 TLS 版本是问题所在。考虑“或密码套件不合适”。邮件服务器是否有证书和私钥?以及它支持哪些密码套件。
-
@Sagii 它是我的属性文件中的 starttls.enables,感谢您指出。我更正了它,并尝试提供 ssl.enable:false 而不是 ssl.protocols:TLSv1.2,但仍然是同样的错误。
-
@user207421 我正在使用 gmail 发送邮件。我现在检查了支持的密码,发现了这个support.google.com/a/answer/9795993?hl=en
标签: java spring-boot spring-boot-starter