Spring Boot发送邮件三——Thymeleaf做模板的邮件

之前写了两篇关于 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("[email protected]");//发件人
        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("[email protected]");//收件人
        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 那样自动化配置较多,更多的是要手工完成,下一篇,也是最后一篇介绍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章