java SMTP邮件发送,修复SSL下465端口Could not connect to SMTP

起因:开发邮件发送系统时,使用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日志

邮箱接收到的邮件

圆满解决问题~

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值