我用Javax发送邮件有问题。我们使用gmail大约4年了,用我们的Java软件发送邮件。现在我得到了以下错误:
Exception in thread "main" java.lang.RuntimeException: 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)
at SendEmail.sendMissingMailWeek(SendEmail.java:233)
at main.negVerkaeufeMailenWeek(main.java:368)
at main.main(main.java:79)
Caused by: 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)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1907)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at SendEmail.sendMissingMailWeek(SendEmail.java:226)
... 2 more
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:98)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:486)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1902)
... 9 more
Process finished with exit code 1
以下是我的gmail设置:
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
props.put("mail.smtp.debug", "true");
我还尝试了其他邮件服务器(O365、Strato),但收到了相同的错误。
我发现了一篇文章,其中包含尚未发布的相同错误消息:
postfix和openJDK 11:“没有合适的协议(协议被禁用或密码套件不合适)”
答案是:
将JavaMail从1.4.7升级到1.6.2后,错误消失了!
该错误表明与邮件服务器建立安全连接所需的TLS协议有关的一些问题。
正如你在问题评论中看到的那样,问题可能是由许多不同的事情引起的。在不了解操作系统、JDK和JavaMail库版本的情况下,我们只能找到真正的原因。
@g00se给了您一个很好的建议:请尝试通过提供以下选项在启用SSL调试的情况下运行程序:
-Djavax.net.debug=all
此外,尝试在配置属性中明确包含TLS协议,这可能会有所帮助:
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
无论如何,对于您指出的症状,并且由于AFAIK Google最近没有更改任何相关配置,您的问题可能与JDK发行版中引入的更改有关,以便在默认情况下禁用不安全的TLS协议版本:
安全libs/javax.net。ssl
➜ 禁用TLS 1.0和1.1
TLS 1.0和1.1是不再被认为是安全的TLS协议版本,已被更安全和现代的版本(TLS 1.2和1.3)所取代。
默认情况下,这些版本现已禁用。如果遇到问题,您可以通过从jdk.tls中删除“TLSv1”和/或“TLSv1.1”来重新启用版本,风险自负。java中的disabledAlgorithms安全属性。安全配置文件。
正如您在错误描述中看到的,更改已向后移植到不同的JDK版本。
也许是您升级了JDK,然后出现了问题。
如果是这种情况,如引用所示,请尝试编辑您的java.security
配置文件并从jdk.tls.disabled算法
安全属性中删除TLSv1
和/或TLSv1.1
。
我有另一个转换套接字异常。Stackoverflow将我和相关答案联系起来,我已经做了人们建议的所有事情。 这里有异常描述: 线程“main”javax中出现异常。邮政MessaginException:无法将套接字转换为TLS;嵌套的例外是:java。网SocketException:java。安全NoSuchAlgorithmException:在com上构造实现时出错(算法:Default,
我正在尝试通过Gmail SMTP服务器使用JavaMail发送电子邮件。代码如下: 返回此错误: 无法将套接字转换为TLS; 完整的堆栈跟踪: 异常线程"main"javax.mail.RuntimeException:ervice.connectMessagingException:无法将套接字转换为TLS;嵌套异常是:ervice.java:176SSLHandshakeException:
我收到了错误:org.springframework.mail。MailSendException:邮件服务器连接失败;嵌套的异常是javax.mail。MessaginException:无法将套接字转换为TLS;嵌套的异常是:javax.net.ssl。SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适)。失败的消息:javax.mail。MessaginE
在一个应用程序中,我使用java实现了邮件发送逻辑。我使用了smtp.gmail。com587端口,具有有效的gmail id和密码。在开发环境中,一切正常。但在生产环境中,我需要使用不同的邮件服务器,例如smtp.xyz。在端口25上输入有效的电子邮件id和密码。 当我继续使用以下代码启用SSL时: 我出错了
我想通过单击JFrame netbeans中的按钮将邮件从我的电子邮件地址发送到另一个电子邮件地址。这是代码, 但它给了我以下错误, javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:java.io.lOException:使用SSL套接字工厂类启动TLS中的异常null: host, portsmtp.gmail.com,587;异常:java.l
我在使用Apache Commons Mail连接到SMTP服务器时遇到问题。我已经尝试了所有方法,但我唯一能在网上找到的是Java邮件。这是我的错误: 原因:javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorExc