一、引入依赖
邮件发送需要引入spring-boot-starter-mail
<!--邮件相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、自动配置
自动配置类:MailSenderAutoConfiguration
自动配置类注册了一个 JavaMailSenderImpl 组件,这个组件就是用来发送邮件的。
我们可以在 MailProperties 类中配置邮件相关信息。
三、测试
邮件发送流程:
1、配置邮箱信息
spring.mail.username=jifei_niu@126.com
spring.mail.password=邮箱授权码,非登录密码
spring.mail.host=smtp.126.com
#开启 smtp 的 ssl 连接
spring.mail.properties.mail.smtp.ssl.enable=true
2、发送普通邮件
@Autowired
JavaMailSenderImpl mailSender;
@Test
public void test() {
SimpleMailMessage message = new SimpleMailMessage();
//邮件设置
message.setSubject("通知-今晚开会");
message.setText("今晚7:30开会");
message.setTo("18331878896@163.com");
message.setFrom("jifei_niu@126.com");
mailSender.send(message);
}
3、发送附件邮件
@Autowired
JavaMailSenderImpl mailSender;
@Test
public void test02() throws MessagingException {
//1、创建一个复杂的消息邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//邮件设置
helper.setSubject("通知-今晚开会");
helper.setText("<b style='color:red'>今晚7:30开会</b>", true);
helper.setTo("18331878896@163.com");
helper.setFrom("jifei_niu@126.com");
//上传文件
helper.addAttachment("1.jpg", new File("E:\\photo\\scenerys\\862114.jpg"));
helper.addAttachment("2.jpg", new File("E:\\photo\\scenerys\\10254385.jpg"));
mailSender.send(mimeMessage);
}
四、常见错误
1、Java 使用QQ邮箱发送邮件报错 530 Error: A secure connection is requiered(such as ssl)
在Java中使用HtmlEmailQQ邮箱发送邮件时报错:
Authentication failed; nested exception is javax.mail.AuthenticationFailedException:
530 Error: A secure connection is requiered(such as ssl);
解决办法:
(1)确认用来发送邮件的QQ邮箱是否开通POP3/SMPT功能;
说明:
由于腾讯对于QQ邮箱的使用客户端登陆的用户(所有非腾讯页面或者腾讯客户端)都需要使用授权码登陆。授权码:在你开通POP3/SMPT功能时获得。
(2)QQ邮箱需要使用SSL,端口号为465或者587 我们在需要在配置文件中做如下设置:
#开启 smtp 服务的 ssl 连接
spring.mail.properties.mail.smtp.ssl.enable=true
2、Authentication failed; nested exception is javax.mail.AuthenticationFailedException 的解决办法
Springboot做项目部署发送邮件时,出现org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 问题
原因是:我的POP3/SMTP服务是开启的,但在password处填写了邮箱的登录密码
一定要把邮箱密码改为授权码后,错误解决。
关于授权码的解释如下:具体可看:http://help.sina.com.cn/comquestiondetail/view/1566/
客户端授权码适用于任何通过IMAP/POP3/SMTP协议登录邮箱的客户端。用于替换在客户端设置中的“登录密码”。新浪邮箱官方手机客户端app,仍然使用邮箱登录密码登录。
使用说明:
1、开启pop,imap需要先开启授权码
2、开启/重置授权码的时候需要手机验证,手机下行3次后需上行验证。若邮箱已绑定手机,则需要使用绑定手机下发短信验证,未绑定手机需要输入新验证手机号进行验证。
3、手机验证之后获得授权码,授权码是16位字母+数字的组合,请保存此授权码以进行客户端设置。在弹出窗中可勾选开启pop,imap,smtp服务。
4、 授权码开启后,pop,imap,smtp验证都使用授权码进行验证。在客户端不可再使用登录密码进行验证。已登录的客户端需要重新输入授权码验证。
5、 授权码都是加密存储,所以不能查看,只能重置。重置授权码也需要先进行手机验证。
6、 授权码关闭,会同时关闭pop,imap,smtp服务。
特别提示:
1、 未开启授权码的用户,仍然保持原来的使用登录密码验证。开启后已设置账号的客户端会验证失败,需要在验证框中输入授权码进行验证。2、 开启授权码后,旧版手机客户端(包括ios和安卓)将无法使用,需要用户升级到最新版本。
总结:
1)检查自己的邮箱是否开启pop3/smtp服务。
2)程序中所填的邮箱密码是否为开启pop3/smtp服务时所给的授权码。
3)授权码开启后,pop,imap,smtp验证都使用授权码进行验证。在客户端不可再使用登录密码进行验证。已登录的客户端需要重新输入授权码验证。