场景1:本地测试良好,一上服务器就崩
报错:
com.sun.mail.util.MailConnectException: Couldn't connect to host
原因:在本地调试javamail端口为25,在服务器上默认阻止25出端口,需要更改安全组来开放端口,华为云测试开发所有端口均无效,此处建议更改端口,方法简单且无副作用
代码如下
mail:
username: ####
password: ###
host: ###
port: 465
default-encoding: UTF-8
properties:
mail:
smtp:
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
fallback: false
smth:
auth: true
strttls:
enable: true
required: true
此处用了yaml语法,更改port为465,下面还要进行socketFactory的设置,设置完成后基本没有其他问题即可正常启动项目
场景2:用163邮箱发送邮件,本地测试正常,服务器测试报错
报错:
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp12,EMCowABnTLCKm2hdk5MQCQ--.33086S2 1567136651,please see http://mail.163.com/help/help_spam_16.htm?ip=xxxxx&hostid=smtp12&time=1567136651
原因:你的邮件被当做垃圾邮件没有发送出去, 554DT:SPM ,
解决办法:
1.检查邮件内是否有test、测试等字样,有的话改掉,163会过滤掉此类邮件,不允许发送(测试失败)
2.把邮件内中文符号替换为英文符号(测试失败)
3.最终解决办法,不用163邮箱,改用qq邮箱,真的吐槽163的垃圾,如果有顾虑更改后服务配置麻烦,直接复制我的代码即可使用,上面那个,填上username,password,host即可
另注意若无其他配置,需要在把发送的人填上username,如下
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("xxxxx");//设置邮件标题
message.setText("xxx");
message.setTo(sendTo);
message.setFrom("这里一定要用自己配置的username");
javaMailSender.send(message);
有问题联系我qq 1841301607