以前发送邮件可能大家需要使用javax下的mail包,自己创建session,mimemessage这种;其实spring帮我们集成了一下,让发邮件变的更简单、可靠。
一般来说,应用系统都需要发送邮件,提供一个认证的邮箱帐号和密码是很常见的。但是,有的客户方是内网直连邮箱服务器的,不需要通过帐号密码认证发送邮件,这样的话,理论上将 mail.smtp.auth 属性配置为 false 就可以了。
mail.smtp.auth 是控制邮件发送是是否需要进行登录认证的:
true 表示需要身份验证
false 表示不需要身份验证
通过 JavaMailSenderImpl 的 setJavaMailProperties 方法来设置该属性。上代码
在pom.xml下载依赖
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
上代码
设想异常原因举例:
javaMail常见问题/error:
ERROR:
com.sun.mail.smtp.SMTPAddressFailedException: 550 #5.1.0 Address rejected.
com.sun.mail.smtp.SMTPSenderFailedException: 553 Local user only
Authentication failed; nested exception is javax.mail.AuthenticationFailedException
原因:
要么是你这边企业邮箱的范围问题,要么就是对方dns服务器无法解析识别你的域名而拒绝接收。
邮件发送时,虽然不需要帐号认证,但是发件箱地址必须跟 host 邮箱服务器是相同类型。
比如 smtp.163.com输入的发件箱地址应该为 ××××@163.com
ERROR:
com.sun.mail.smtp.SMTPSenderFailedException: 550 5.8.2 user can not use SMTP service
原因:
这个就是发送邮件的邮箱名不可用。
ERROR:
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.
AuthenticationFailedException: 535 5.7.3 Authentication unsuccessful
原因:
设置 mail.smtp.auth=false 后,同时又设置了认证邮箱帐号和密码,那么等价于 mail.smtp.auth=true 了。
此时,如果认证帐号密码信息错误,則报异常。
ERROR:
Could not connect to SMTP host: xx@xxx.com, port: 25
原因:
排除配置错误的可能性, 很有可能是你的服务器的运营商将25端口封禁了!