之前写了两篇关于 Spring Boot 发送邮件的博客,一篇是简单的,包括搭建环境、依赖等,一篇是功能更丰富,包括如何发送附件邮件和内容带图片的邮件,有兴趣可以看一下
Spring Boot发送邮件一
Spring Boot发送邮件二
下边这篇就开始展示如何利用前端模板 Thymeleaf 发送邮件
Thymeleaf做模板发送邮件
- 1.在pom.xml中加入 Thymeleaf 的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- 2.在
src/resources/templates
创建 mail.html 文件
这里直接上模板代码,需要注意的是创建 HTML 后导入Thymeleaf 的网址<html lang="en" xmlns:th="http://www.themeleaf.org">
,然后就可以使用 Thymeleaf的标记符号th:xxx1 = ${xxx2}
了; xxx1 代表操作方式,比如th:text
代表文本,th:if
代表条件表达式;xxx2代表后端提供的属性;还有要用${}
包裹后端提供的属性名称 - 3. HTML 代码:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.themeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
欢迎<span th:text=${username}></span>加入xxx大家庭
</div>
您的入职信息如下
<table border="1">
<tr>
<td>职位</td>
<td th:text=${position}></td>
</tr>
<tr>
<td>职称</td>
<td th:text=${joblevel}></td>
</tr>
<tr>
<td>薪水</td>
<td th:text=${salary}></td>
</tr>
<tr>
<td>部门</td>
<td th:text=${dept}></td>
</tr>
</table>
<div style="color: #ff5d9b;font-size: 20px;" >
希望在未来日子里,携手共进
</div>
</body>
</html>
- 4.后端代码
@SpringBootTest
class MailApplicationTests {
@Autowired
JavaMailSender javaMailSender;//邮件发送
@Autowired
SpringTemplateEngine springTemplateEngine;//Spring 模板引擎
@Test
public void test4() throws MessagingException {
MimeMessage msg = javaMailSender.createMimeMessage();//创建模拟的消息
MimeMessageHelper helper = new MimeMessageHelper(msg, true);//创建模拟的消息工具
helper.setFrom("15910976735@139.com");//发件人
helper.setSentDate(new Date());//发送日期
helper.setSubject("这是测试主题(thymeleaf)");//发送主题
Context context = new Context();
context.setVariable("username","javaboy");
context.setVariable("position","Java工程师");
context.setVariable("dept","产品研发部");
context.setVariable("salary",9999);
context.setVariable("joblevel","高级工程师");
String process = springTemplateEngine.process("mail.html", context);
helper.setText(process,true);//内容是否设置成html,true代表是
helper.setTo("15910976735@139.com");//收件人
javaMailSender.send(msg);//发送
}
与之前的发送内容有图片的邮件相比,步骤几乎是一样的,只不过发送内容多 Spring Boot提供的模板引擎SpringTemplateEngine.process()
来生成字符串内容的步骤,然后再放入MimeMessageHelper.setText()
方法中;还有一个不同就是Context
这个类来处理后端属性,它是在 Thymeleaf 包下,导入Thymeleaf 依赖后出现的,功能很简单,不用多说了;下面着重看一下 SpringTemplateEngine
这个类,它是一个模板引擎,由 Spring Boot自动化配置提供的,减少了很多配置,目前用它处理 Context
来生成 HTML 的字符串。源码在 ThymeleafAutoConfiguration
中自动注入:
@Bean
@ConditionalOnMissingBean({ISpringTemplateEngine.class})
SpringTemplateEngine templateEngine(ThymeleafProperties properties, ObjectProvider<ITemplateResolver> templateResolvers, ObjectProvider<IDialect> dialects) {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setEnableSpringELCompiler(properties.isEnableSpringElCompiler());
engine.setRenderHiddenMarkersBeforeCheckboxes(properties.isRenderHiddenMarkersBeforeCheckboxes());
templateResolvers.orderedStream().forEach(engine::addTemplateResolver);
dialects.orderedStream().forEach(engine::addDialect);
return engine;
}
- 5.好了代码写完,执行@Test方法后,查看 139 邮箱结果
结束
这样一份可以修改模板的邮件就完成了,当然是用的 Thymeleaf ,另外一种在 Spring Boot 常用的模板是 Freemarker ,它可没有像 Thymeleaf 那样自动化配置较多,更多的是要手工完成,下一篇,也是最后一篇介绍