起因:开发邮件发送系统时,使用25端口能够正常发送邮件,启用SSL使用465端口时,发送邮件报Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465的错误。

由于25端口可以正常发送邮件,所以可以保证账号和网络是通的,那么可能就出在465出站权限或者服务器环境问题。
经运维同学配合排查,465端口也能正常telnet,所以不存在465出站权限的问题,那么就只能是服务器的应用环境问题了。
经过搜索引擎查找后发现是当前使用JDK的版本较高(jdk11),禁用了TLSv1(因为TLSv1存在安全隐患),如下图,TLSv1与TLSv1.1均被禁用了(配置所在JAVA_HOME/jre/lib/security/java.security)

看了一圈搜索引擎提供的解决方案是修改这里的参数,去掉TLSv1,TLSv1.1保存,相当于启用TLSv1,TLSv1.1,确实能发送成功了。
但是TLSv1,TLSv1.1是存在安全隐患的,那么这种处理方式其实是治标不治本的。
所以我们还得找到真正解决这个问题的方法。
解决起来其实也很简单!就是修改邮件发送时SSL的protocol就可以了。
通过查看MailSSLSocketFactory的源码可以发现,他的构造方法是可以我们自己传入protocol的

那么这样子就好办起来,我们直接传入TLSv1.2;
并且为了保险起见,我们也直接在Session的Properties传入protocol;
具体配置入下所示

发送邮件测试一下
发送的java日志

邮箱接收到的邮件文章来源:https://www.toymoban.com/news/detail-781775.html

圆满解决问题~文章来源地址https://www.toymoban.com/news/detail-781775.html
到了这里,关于java SMTP邮件发送,修复SSL下465端口Could not connect to SMTP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!