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");

posted @   Steven-Russell  阅读(641)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示