You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发送邮件遇javax.net.ssl.SSLHandshakeException错误:无合适协议求助

解决SMTP邮件发送SSLHandshakeException(无合适协议)问题

问题描述

发送邮件时抛出以下错误:

javax.net.ssl.SSLHandshakeException: 无合适协议(协议已禁用或密码套件不合适)。失败消息:javax.mail.MessagingException: 无法向SMTP主机发送命令;嵌套异常:javax.net.ssl.SSLHandshakeException: 无合适协议(协议已禁用或密码套件不合适);消息异常(1个):失败消息1:javax.mail.MessagingException: 无法向SMTP主机发送命令;嵌套异常:javax.net.ssl.SSLHandshakeException: 无合适协议(协议已禁用或密码套件不合适)

已配置Office365 SMTP参数如下,但问题未解决:

spring.mail.host=smtp.office365.com
spring.mail.port=587
spring.mail.username=XXXXXXXXXXXXXXXXXXXXX
spring.mail.password=XXXXXXXXXXXXX
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=false

可行解决方案

  • 指定兼容的SSL/TLS协议版本
    Office365 SMTP服务器要求使用TLSv1.2及以上版本,可在application.properties中添加协议指定配置:
spring.mail.properties.mail.smtp.ssl.protocols=TLSv1.2
spring.mail.properties.mail.smtp.ssl.enabled=true

若通过Java代码配置邮件客户端,直接设置对应属性:

Properties props = new Properties();
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
props.put("mail.smtp.ssl.enabled", "true");
  • 检查JVM安全配置
    JVM的java.security文件(路径通常为JRE/lib/security/java.security)可能禁用了TLSv1.2。找到如下配置项:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, ...

确保配置中不包含TLSv1.2,若有则移除该条目,之后重启应用服务。

  • 配置兼容的密码套件
    若协议配置正确仍报错,可指定Office365支持的密码套件,补充到application.properties:
spring.mail.properties.mail.smtp.ssl.ciphers=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • 升级JDK版本
    旧版JDK(如JDK 7及更早)对TLSv1.2的支持存在缺陷,建议升级至JDK 8u261及以上版本,确保对现代TLS协议的完整支持。

  • 排查网络限制
    若应用部署在有代理或防火墙的环境中,需确认网络策略允许访问smtp.office365.com:587,且未拦截TLSv1.2协议的流量。

内容的提问来源于stack exchange,提问作者Pradeep Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 12:52:33