项目原先邮件发送采用spring mail ,一直用的是腾讯企业邮箱。最近需要切换outlook,原本以为只需简单改下账户密码及host等配置即可。切换之后发现发送失败,经过一番查找终于发送成功。记录一下问题。
原先邮件发送配置如下
spring.mail.username=xxxxxxxxx
spring.mail.password=xxxxxxxxx
spring.mail.host=smtp.exspring.mail.qq.com
spring.mail.port=465
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.stattls.required=true
spring.mail.properties.mail.debug=false
spring.mail.properties.mail.smtp.port=587
spring.mail.properties.mail.smtp.socketFactory.port=587
spring.mail.properties.mail.smtp.socketFactory.fallback=false
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout=30000
spring.mail.properties.mail.smtp.timeout=30000
spring.mail.properties.mail.smtp.writetimeout=30000
-- 切换后配置
spring.mail.username=xxxxxxxxx
spring.mail.password=xxxxxxxxx
spring.mail.host=smtp.office365.com
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.stattls.required=true
spring.mail.properties.mail.debug=false
spring.mail.properties.mail.smtp.port=587
spring.mail.properties.mail.smtp.socketFactory.port=587
spring.mail.properties.mail.smtp.socketFactory.fallback=false
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout=30000
spring.mail.properties.mail.smtp.timeout=30000
spring.mail.properties.mail.smtp.writetimeout=30000
一运行直接报错
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587;
nested exception is:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.com, port: 587;
nested exception is:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:432)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
发现是ssl认证有问题移除spring.mail.smtp.socketFactory.class配置后
又有新错误信息
javax.mail.AuthenticationFailedException: 535 5.7.139 Authentication unsuccessful, SmtpClientAuthentication is disabled for the Tenant. Visit https://aka.ms/smtp_auth_disabled for more information. [HK2PR06CA0003.apcprd06.prod.outlook.com]
好像又是权限有问题,对outlook邮箱配置不熟,找了一大堆资料终于发现。需要设置SMTP权限
outlook邮箱的权限异常_Monten_Cristo的博客-优快云博客
最终配置,终于可以发出去了。另外权限配置后貌似不会立马生效,需要等上一段时间
spring.mail.username=xxxxxxxxx
spring.mail.password=xxxxxxxxx
spring.mail.host=smtp.office365.com
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.stattls.required=true
spring.mail.properties.mail.debug=false
spring.mail.properties.mail.smtp.port=587
spring.mail.properties.mail.smtp.socketFactory.port=587
spring.mail.properties.mail.smtp.socketFactory.fallback=false
#spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout=30000
spring.mail.properties.mail.smtp.timeout=30000
spring.mail.properties.mail.smtp.writetimeout=30000