Could not connect to SMTP host: smtp.163.com, port: 465, response: -1
- 1、背景
- 2、解决
1、背景
记录一次非常奇怪的问题。
项目中有一个定时发送邮件的功能;在一个风和丽日的早上,业务咔咔一顿消息,邮件怎么不发了。
额、、、
更奇怪的是,部分能发送,部分不能发送。
java">Could not connect to SMTP host: smtp.163.com, port: 465, response: -1
2、解决
服务器一顿排查,均无异常。
- 1、CPU,经排查发邮件当时CPU并不高,且系统没有宕机。
- 2、内存,经排查,内存占用也属于正常值。
- 3、磁盘,磁盘容量。
- 4、发布,近一个月并无发布情况。
既然不是服务器相关的问题,那就从代码本身查找问题。
- 1、SSL/TLS协议问题:
可能是因为您使用的Java环境中禁用了某些SSL/TLS协议版本。在Java高版本中,默认禁用了SSLv3, TLSv1, TLSv1.1等协议。您需要在代码中指定使用的TLS版本。例如:
java">prop.put("mail.smtp.ssl.protocols", "TLSv1.2");
请确保您的Java环境支持您指定的TLS版本,并且没有禁用它。
- 2、端口和加密设置:
确保您的代码中正确设置了使用SSL加密的端口和相应的Socket工厂。例如:
java">prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.put("mail.smtp.ssl.enable", true);
同时,确保您使用的端口是465,这是SMTPS(SMTP over SSL)的标准端口。
- 3、Java环境配置:
如果您在阿里云等云服务上部署应用,可能需要检查云服务的安全组设置,确保465端口没有被阻止。
- 4、邮件协议配置:
在某些情况下,如果您使用的是端口465,应该在配置中使用SMTPS协议而不是SMTP。例如,在Spring Boot的配置文件中,应该设置:
java">spring.mail.protocol=smtps
这将确保您的应用使用正确的协议与SMTP服务器通信。
- 5、环境问题:
如果您最近升级了JDK版本,可能需要检查JAVA_HOME/jre/lib/security/java.security文件中的配置,确保没有禁用您需要使用的TLS版本。
好吧,以上都是AI搜集了37个网页整理回答的,还挺不错的。
以下是对应截图。
这个就不是AI回答的咯
- 6、附件
因为并非全部不能发送,部分能成功,部分不能成功,所以考虑是否是附件过大导致的问题。但后续手动触发邮件的发送的时候,发现大附件也能正常发送,故排除此情况。
- 7、检查端口
邮件采用默认端口 465(加密),和25(非加密),如果是在阿里云等云平台部署,需要检查一下近期是否有安全策略的调整。比如对25端口的禁用。可以根据端口开放情况设置对应的端口。
- END:解决问题
排查发现代码并没有设置协议,增加如下配置:
java">Properties properties = new Properties();
properties.put("mail.smtp.ssl.enable", true);
properties.put("mail.smtp.ssl.protocols", "TLSv1.2");
问题解决。
OK,就这些吧。
有什么不对的还望指正,书写不易,觉得有帮助就点个赞吧!☺☺☺
参考链接:https://www.cnblogs.com/luoxiao1104/p/16672860.html
https://blog.csdn.net/cry1049208942/article/details/97183552