问题描述
产品要求做一个邮箱推送功能,在本地和公司的测试环境测试了都没有问题,上线生产环境的时候报554错,如下所示:
HL:ITC 0,163 smtp18,JNxpCgA3FbKACcVjSDhtAg--.46749S0 1673857408 http://mail.163.com/help/help_spam_16.htm?ip= ***.**.**.** &hostid=smtp18&time=1673857408
IP is rejected
javax.mail.MessagingException: Could not connect to SMTp host: ***.**.**.**, port: 9090, response: 554
尝试多种解决方案,都不行:
抄送给自己(一点变化都没有)
设置ssl为true(连接超时)
修改端口号(连接超时)
后续:生产环境应用服务器不能直接访问smtp服务,做了网络映射,起初是网络映射端口是9090->25,在telnet的时候跟上面一样会显示IP is rejected,然后修改网络映射端口为9090->465之后程序telnet正常,但是邮箱推送时报如下的错:
网上是说465端口需要设置ssl配置,具体配置如下
props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory") ;
props.setProperty("mail.smtp.socketFactory.fallback","false");
props.setProperty("mail.smtp.ssl.enable", "true");
props.setProperty("mail.smtp.port","9090");
props.setProperty("mail.smtp.socketFactory.port","9090");
然后程序有包了最上面的错误:
HL:ITC 0,163 smtp18,JNxpCgA3FbKACcVjSDhtAg--.46749S0 1673857408 http://mail.163.com/help/help_spam_16.htm?ip= ***.**.**.**&hostid=smtp18&time=1673857408
IP is rejected
javax.mail.MessagingException: Could not connect to SMTp host: ***.**.**.**, port: 9090, response: 554
就好懵逼,网上各种查阅资料,只遇到了一个类似的,TM的还没有解决方案。
问题解决
后面反复测试了很多种方法,都不行,询问了以前开发过邮箱推送功能的同事,他们部门是用的QQ邮箱,然后我改用了QQ邮箱的smtp服务就可以了,要注意的是:新版的qq邮箱账号的smtp服务不稳定,经常会自动关掉,建议使用旧版qq邮箱账号