spring-boot-starter-mail
依赖;到 https://mvnrepository.com/ 网站找 maven 依赖;<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.7.1</version>
</dependency>
application.properties
中进行邮箱参数配置;# MailProperties
spring.mail.host=smtp.163.com
spring.mail.port=465
spring.mail.username=xxxxxxxx@163.com
spring.mail.password=xxxxxxxxxxxx #切记使用授权码,使用密码行不通
#启用加密连接
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true
JavaMailSender
发送邮件:
JavaMailSender
属性MimeMessage
对象MimeMessageHelper
定义邮件内容,并使用send
方法传送出去@Component
public class MailClient {
private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;//定义发件人
/**
* 发送邮件功能
* @param to,邮件目的地
* @param subject,主题
* @param content,邮件内容
*
* 发送邮件失败会保存日志
*/
public void sendMail(String to, String subject, String content) {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);//不加参数默认是文本,加上true之后支持html格式文件
mailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("发送邮件失败:" + e.getMessage());
}
}
}
@SpringBootTest
public class MailTests {
@Autowired
private MailClient mailClient;
@Autowired
private TemplateEngine templateEngine;
//测试发送文本文件
@Test
public void testTextMail() {
mailClient.sendMail("rongwenhanhhu@163.com", "TEST", "Welcome.");
}
//测试发送html文件
@Test
public void testHtmlMail() {
//给模板传context参数
Context context = new Context();
//传给模板的变量存进去
context.setVariable("username", "sunday");
//调用模板引擎生成动态网页
String content = templateEngine.process("/mail/demo", context);
System.out.println(content);
mailClient.sendMail("rongwenhanhhu@163.com", "HTML", content);
}
}
解释:
Context
类来定义要传给 thymeleaf 模板渲染的 html 文件的一些参数;并且主动调用 templateEngine(因此要注入templateEngine 属性)来生成动态网页;注意:
rebuild
一下,否则 target 文件夹中确实没有这个文件,也就是报错找不到文件(是 rebuild 而不是 build)。html 文件示例:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>邮件示例</title>
</head>
<body>
<p>欢迎你, <span style="color:red;" th:text="${username}"></span>!</p>
</body>
</html>
邮箱中收到的邮件:
Caused by: javax.mail.AuthenticationFailedException: 535 Error: authentication failed
参考文献:
javax.mail.AuthenticationFailedException: 535 Error: authentication failed解决办法
参考文献:
报错org.thymeleaf.exceptions.TemplateInputException: Error resolving template解决方案