smtp 通过465端口发送邮件失败

问题现象:
1、smtp请求邮件服务器发送邮件,配置了邮件服务器地址和465端口
2、抓包发现在建TCP3次握手动作之后,客户端请求连接达到30s,然后主动中断连接,详见下图

3、java代码中报错如下:


分析过程:
1、怀疑网络问题
通过使用curl命令检查,发现客户端和邮件服务器网络通畅,不存在网络问题,详见smtp报文分析(25、465、587端口)_Steven-Russell的博客-CSDN博客
2、发现客户端主动中断连接,并且达到30s之后中断,那么极有可能时触发了客户端的smtp超时,检查smtp配置 mail.smtp.timeout = 30000,恰好佐证了想法
3、通过添加 smtp 的debug配置,mail.debug=true ,打印出debug日志 
4、排查日志,发现isSSL=false
5、反观465端口时smtp的ssl交互端口,那么和isSSL=false不就矛盾了吗?
6、检查代码,配置 mail.smtp.ssl.enable 改为true,重新运行程序,发现邮件发送成功。

综上可知,问题根因:
1、465是smtp的ssl安全端口,所以使用javamail时必须有如下配置:
properties.put("mail.smtp.ssl.enable", "true"); // 默认值为false
2、一定要仔细排查前述配置是否因为代码分支不同,导致设置为false,或者默认值为false

注意:此处因为服务器配置smtps端口是465,方才有上述结论,若是手动配置了其他端口作smtps的安全端口,同理需要 properties.put("mail.smtp.ssl.enable", "true");

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值