Spring Boot发送邮件遇javax.net.ssl.SSLHandshakeException异常求助
解决Spring Boot发送Gmail邮件的SSL握手异常
问题根源
出现javax.net.ssl.SSLHandshakeException: No appropriate protocol异常,是因为高版本JDK默认禁用了TLSv1/TLSv1.1等旧协议,而Gmail SMTP服务要求使用TLSv1.2及以上版本,导致协议握手不匹配。
修复方案
1. 补充邮件配置强制指定TLS版本
在application.yml的邮件配置中,新增SMTP协议指定配置,明确使用TLSv1.2:
spring: mail: host: smtp.gmail.com port: 587 username: ${username} password: ${app-password} properties: mail: transport: protocol: smtp smtp: auth: true starttls: enable: true required: true ssl: protocols: TLSv1.2
核心新增项:
smtp.ssl.protocols: TLSv1.2,强制应用使用TLS1.2完成SSL握手。
2. 调整JDK安全配置(方案1无效时使用)
如果JDK全局禁用了TLSv1.2,需修改JDK安装目录下的jre/lib/security/java.security文件:
- 定位到
jdk.tls.disabledAlgorithms配置行 - 移除其中的
TLSv1.2(若存在) - 保存后重启应用
3. 验证Gmail应用密码有效性
确认配置中的${app-password}是Gmail的应用专用密码:
- 开启Google账号两步验证后,才能生成应用专用密码
- 用生成的应用密码替换普通账号密码,避免因2FA导致的权限问题
测试验证
修改配置后重启应用,重新触发邮件发送,检查异常是否消除。
内容的提问来源于stack exchange,提问作者Susmitha
相关产品推荐
相关产品推荐

