目录
1、QQ邮箱的SMTP服务器端口与相关yml配置
QQ邮箱STMP服务器的有两种端口:25与465
(1)端口号25:明文传输
(2)端口号465,基于SSL协议
当使用25号端口,yml的配置如下
spring:
mail:
host: smtp.qq.com
protocol: smtp
port: 25
username: XXX@qq.com #邮箱地址
password: xxxx #授权码
当使用465号端口,yml配置如下
spring:
mail:
host: smtp.qq.com
protocol: smtp
port: 465
username: xxx@qq.com #邮箱地址
password: xxx #授权码
properties: # 配置以SSL的方式发送, 这个需要使用这种方式并且端口是465
mail:
smtp:
auth: true
ssl:
enable: true
socketFactory:
class: com.sun.mail.util.MailSSLSocketFactory
fallback: false
debug: true
2、错误汇总
注意以下情景,默认每次只发生一种错误,如果发生多种错误,会在正文中指出
1、javax.mail.MessagingException: Got bad greeting from SMTP host: smtp.qq.com, port: 465, response: [EOF]
当使用465号端口,却不开启认证,即yml配置如下所示时,就会出现错误
spring:
mail:
host: smtp.qq.com
protocol: smtp
port: 465
username: xxx@qq.com #邮箱地址
password: xxx #授权码
2、javax.net.ssl.SSLException: Unsupported or unrecognized SSL message. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 25;
这种错误发生的原因就如标题所示,开启了25号端口进行连接,却使用了SSL协议,配置文件如下所示时,会发生这种错误
spring:
mail:
host: smtp.qq.com
protocol: smtp
port: 25
username: XXX@qq.com #邮箱地址
password: XXX #授权码
properties: # 配置以SSL的方式发送, 这个需要使用这种方式并且端口是465
mail:
smtp:
auth: true
ssl:
enable: true
socketFactory:
class: com.sun.mail.util.MailSSLSocketFactory
fallback: false
debug: true
3、Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your authorization code to login.
出现这种错误,就是授权码输错了,或者邮箱(username)输错了。在端口号为25与465测试时,错误信息相同
4、com.sun.mail.smtp.SMTPSenderFailedException: 501 Mail from address must be same as authorization user.
这种错误发生的原因是由于发件人的邮箱与登录服务器的邮箱名不一致而导致的,比如下面的代码
这个代码中的发件人与yml中的username不一致,导致了错误,在端口25与465同时测试,抛出相同的错误信息。
public static void sendMail(String to, String content, boolean isHtml) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSentDate(new Date());
//错误的发件人
mimeMessageHelper.setFrom("1452325423@qq.com");
mimeMessageHelper.setText(content, isHtml);
mimeMessageHelper.setSubject("牛客网注册激活码");
javaMailSender.send(mimeMessage);
}
5、com.sun.mail.smtp.SMTPSendFailedException: 502 Invalid input from 218.26.158.96 to newxmesmtplogicsvrszb9-0.qq.com.
它表示在尝试使用SMTP协议发送邮件时,服务器拒绝了来自IP地址218.26.158.96的输入。这个错误可能是由于客户端发送了无效的命令或数据导致的
这个错误不是很熟悉,当我的发件人格式不正确时,会出现这种错误。比如
发件人:
mimeMessageHelper.setFrom("123456789@qq");
用户名:
123456789@qq.com
只要把发件人格式,修改正确就行
补充发件人正确写法
发件人的邮箱前缀必须与登录SMTP的用户名一致,举个例子
spring:
mail:
host: smtp.qq.com
protocol: smtp
port: 465
username: 123456789@qq.com #邮箱地址
password: xxx #授权码
此时的发件人可设置为
mimeMessageHelper.setFrom("123456789@qq.com");
或者
mimeMessageHelper.setFrom("XXX<123456789@qq.com>");