java发邮件错误javax.net.ssl.SSLHandshakeException:No appropriate protocol问题及解决

 更新时间:2026年05月28日 09:16:34   作者:把酒问天  
这篇文章主要介绍了java发邮件错误javax.net.ssl.SSLHandshakeException:No appropriate protocol问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java发送邮件时报以下错误

如下所示:

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher

[com.bm6api.controller.v1.AppUserController] - sendLoginAuthCodeMail 发送登录验证码邮件 : {"code":200,"info":"Success"}
[org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor] - Written [{"code":200,"info":"Success"}] as "text/html" using [org.springframework.http.converter.StringHttpMessageConverter@3c3f40cb]
[org.springframework.web.servlet.DispatcherServlet] - Null ModelAndView returned to DispatcherServlet with name 'SpringMVC': assuming HandlerAdapter completed request handling
[org.springframework.web.servlet.DispatcherServlet] - Successfully completed request
[freemarker.cache] - TemplateLoader.findTemplateSource("email_login_auth_en_US.ftl"): Not found
[freemarker.cache] - TemplateLoader.findTemplateSource("email_login_auth_en.ftl"): Not found
[freemarker.cache] - TemplateLoader.findTemplateSource("email_login_auth.ftl"): Found
[freemarker.cache] - "email_login_auth.ftl"("en_US", UTF-8, parsed): using cached since 
javax.mail.MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465;
  nested exception is:
        javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1963)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
        at javax.mail.Service.connect(Service.java:345)
        at javax.mail.Service.connect(Service.java:226)
        at javax.mail.Service.connect(Service.java:246)
        at com.bm6api.service.impl.MailServiceImpl.sendEmail(MailServiceImpl.java:92)
        at com.bm6api.thread.EmailSendThread.run(EmailSendThread.java:34)
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
        at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
        at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:106)
        at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:410)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:389)
        at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:528)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:333)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:208)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
        ... 6 more

解决办法1

修改JDK配置,将TLSv1和TLSv1.1从配置项里去除。

配置文件路径在:

$JAVA_HOME/jre/lib/security/java.security

定位到配置文件的:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA

所在行,注释掉原来那行,复制到下方,去掉TLSv1和TLSv1.1,保存。

# Note: This property is currently used by the JDK Reference implementation.
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
#   jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048, \
#       rsa_pkcs1_sha1
#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

重新运行你自己的java服务进程即可。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java基础之Stream流原理与用法详解

    Java基础之Stream流原理与用法详解

    从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式。本文就来为大家详细讲讲Stream流原理与用法
    2022-08-08
  • 基于Java 生产者消费者模式(详细分析)

    基于Java 生产者消费者模式(详细分析)

    下面小编就为大家分享一篇基于Java 生产者消费者模式(详细分析),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • JNI语言基本知识

    JNI语言基本知识

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。接下来通过本文给大家分享jni 基础知识,感兴趣的朋友一起看看吧
    2017-10-10
  • JAVA多线程Thread和Runnable的实现

    JAVA多线程Thread和Runnable的实现

    java中实现多线程有两种方法:一种是继承Thread类,另一种是实现Runnable接口。
    2013-03-03
  • SpringBoot3解决跨域请求的方案小结

    SpringBoot3解决跨域请求的方案小结

    解决跨域请求,主要有JSONP,iframe,window.name,CORS等方式,其中CORS方式是最常用的跨域实现方式,而且是对各种请求方法、各种数据请求类型都是完美支持的,本文介绍了SpringBoot3解决跨域请求的方案小结,需要的朋友可以参考下
    2024-07-07
  • G1垃圾回收器在并发场景调优详解

    G1垃圾回收器在并发场景调优详解

    这篇文章主要为大家介绍了G1垃圾回收器在并发场景调优详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Vue实现验证码登录的超详细步骤

    Vue实现验证码登录的超详细步骤

    这篇文章主要给大家介绍了关于Vue实现验证码登录的超详细步骤,我们在使用vue进行前端开发时都需要登录验证,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Java实现文件检索系统的示例代码

    Java实现文件检索系统的示例代码

    这篇文章主要为大家详细介绍了如何刘Java语言实现简易的文件检索系统,文中的示例代码讲解详细,对我们学习Java开发有一定的帮助,需要的可以参考一下
    2022-07-07
  • Java Mybatis架构设计深入了解

    Java Mybatis架构设计深入了解

    在本篇文章里小编给大家整理的是一篇关于Java Mybatis架构设计详解内容,对此有兴趣的朋友们可以参考下,希望能够给你带来帮助
    2021-11-11
  • java集合Collection常用方法解读

    java集合Collection常用方法解读

    这篇文章主要介绍了java集合Collection常用方法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论