admin管理员组文章数量:1567915
功能场景
邮件发送
问题描述
- 项目需要从单体变成集群部署,且为了应对高并发,采用两台服务器分散压力,一台为旧的,一台为新的。
- 两台服务器,jdk版本一致,均为openjdk-1.8.0.312.b07,但是一台服务器能发送邮件,另一台却失败。
- 在服务器上安装sendmail等工具,能直接发邮件。
- 阿里云上的安全组对465端口开放,使用465端口发送邮件。
- 新服务器上使用代码发送邮件报错:
- Could not connect to SMTP host: smtp.163, port: 465, response: -1
- javax.ssl.SSLHandshakeException: No appropriate protocol。
javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465, response: -1
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1960)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
at javax.mail.Service.connect(Service.java:295)
......
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
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)
问题定位
- 报错中有这么一段:Could not connect to SMTP host: smtp.163, port: 465。就以为是阿里云的465端口权限没有开好导致的,但是试了直接在服务器上用sendmail发送邮件,可以成功,那么排除是服务器的问题。
- 两台服务器,一台成功,一台失败,一样的代码产生了不同的结果,排除是代码的问题。
- 既不是服务器也不是代码的问题,那么还能想到是哪里的问题呢?
- 通过No appropriate protocol 这个报错,最终发现了问题所在:jdk拦截了SSLv3请求
问题解决
- 找到jdk安装路径
echo $JAVA_HOME
- 找到配置文件
/jre/lib/security/java.security
- 定位到指定行
/SSLv3
- 修改配置文件
删除SSLv3、TLSv1、TLSv1.1
- 执行修改命令
update-crypto-policies --set LEGACY
- 重启项目
版权声明:本文标题:【Bug】No appropriate protocol 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726295725a1064581.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论