起因:开发邮件发送系统时,使用25端口能够正常发送邮件,启用SSL使用465端口时,发送邮件报Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465的错误。
![](https://img-blog.csdnimg.cn/img_convert/2196bc7ccc1d21a1aee7e43741016a3b.png)
由于25端口可以正常发送邮件,所以可以保证账号和网络是通的,那么可能就出在465出站权限或者服务器环境问题。
经运维同学配合排查,465端口也能正常telnet,所以不存在465出站权限的问题,那么就只能是服务器的应用环境问题了。
经过搜索引擎查找后发现是当前使用JDK的版本较高(jdk11),禁用了TLSv1(因为TLSv1存在安全隐患),如下图,TLSv1与TLSv1.1均被禁用了(配置所在JAVA_HOME/jre/lib/security/java.security)
![](https://img-blog.csdnimg.cn/img_convert/28e7d95de141449e0b55f2db40d0ba65.png)
看了一圈搜索引擎提供的解决方案是修改这里的参数,去掉TLSv1,TLSv1.1保存,相当于启用TLSv1,TLSv1.1,确实能发送成功了。
但是TLSv1,TLSv1.1是存在安全隐患的,那么这种处理方式其实是治标不治本的。
所以我们还得找到真正解决这个问题的方法。
解决起来其实也很简单!就是修改邮件发送时SSL的protocol就可以了。
通过查看MailSSLSocketFactory的源码可以发现,他的构造方法是可以我们自己传入protocol的
![](https://img-blog.csdnimg.cn/img_convert/0c3f56e72b7533b327eec1448192531c.png)
那么这样子就好办起来,我们直接传入TLSv1.2;
并且为了保险起见,我们也直接在Session的Properties传入protocol;
具体配置入下所示
![](https://img-blog.csdnimg.cn/img_convert/3891a1f4fbd9fe475a52fc30c4bae8f7.png)
发送邮件测试一下
发送的java日志
![](https://img-blog.csdnimg.cn/img_convert/d21a806789d5b19d8833b9bb5250d5a1.png)
邮箱接收到的邮件
![](https://img-blog.csdnimg.cn/img_convert/cdcbaad9eec06edf544bdc69e7475c70.png)
圆满解决问题~