此前运行正常的Spring Mail项目突发SMTP主机问候错误,SpringBoot主类无法正常退出
SMTP连接返回554错误的突发场景可能原因
结合前一周项目运行完全正常、当日突发连接失败的特征,常见触发点包括:
- 目标SMTP服务端临时故障:比如mail.test.com对应的邮件服务器当日出现25端口服务宕机、反垃圾规则临时升级、服务配置变更失误,导致握手阶段直接返回无意义的554响应,无法完成正常greeting交互
- 开发机所在公网出口IP被SMTP服务端临时拉黑:同网络出口下的其他设备发送的邮件流量触发了服务端反垃圾规则,IP被临时封禁后,新的TCP连接会在握手阶段直接被拒绝返回554
- 网络链路异常:本地运营商临时拦截25端口出站流量、开发机到邮件服务器的路由出现波动,导致TCP连接虽然建立,但传输过程中SMTP问候报文被截断或篡改,JavaMail客户端无法解析合法响应就抛出greeting错误
- 本地安全软件拦截:当日更新的系统防火墙、杀毒软件规则拦截了发往mail.test.com 25端口的SMTP流量,篡改了服务端返回的响应内容,触发客户端异常
- 本地DNS缓存异常:本地解析mail.test.com时出现缓存偏移,把域名指向了错误的IP地址,连接到非目标SMTP服务时收到不符合规范的响应
排查小技巧:本地可先执行telnet mail.test.com 25做验证,若能收到以220开头的标准SMTP问候报文,说明网络链路正常,问题多为客户端配置或本地安全软件拦截;若telnet连接直接返回554,则大概率是服务端故障或来源IP被拦截
SpringBoot主类无法正常终止、需手动杀进程的常见原因
- 项目内的非守护线程未随应用关闭自动终止:比如JavaMail连接池、定时任务线程池、数据库连接池没有配置优雅停机逻辑,JVM触发关闭钩子时,后台线程仍处于运行状态阻止退出
- 阻塞调用未设置合理超时:SMTP连接的超时配置设置过长,应用触发退出时程序仍卡在等待SMTP服务响应的阻塞流程中,无法走完正常退出流程
- 开发环境插件残留:Eclipse安装的热部署插件、Spring Boot开发工具插件的后台进程未和主应用绑定,主应用停止后插件进程驻留导致JVM无法完全退出
- 系统端口未正常释放:应用占用的HTTP端口、Actuator监控端口在关闭流程中没有被及时释放,JVM一直等待端口回收超时,无法完成退出
内容的提问来源于stack exchange,提问作者stackerstack
相关产品推荐
相关产品推荐

