👨🎓作者:bug菌
✏️博客:CSDN、掘金、infoQ、51CTO等
🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网合计8w粉+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
续上篇,我们已经成功实现了邮件发送提醒,对吧,小伙伴跟着我一路看过来,是不是感觉轻松多了,毕竟篇幅我都不会很长。这样下去,每天学习一个知识点,一个月下来就是三十个知识点,日积月累,你就是下一个大佬啦。如果有小伙伴直接中途插入,还请麻烦先去看上几期的内容,要不然贸然跟着学,肯定要吃大亏,去我的专栏《SpringBoot零基础入门》从头开始跟进。
今天我就给大家带来点与Thymeleaf模板引擎相关的知识点,通常有些邮件会有格式要求,就是格式是固定的,不知道你们生活场景中是否有遇到,像这种需求,我们应该怎么实现呢?好啦,废话不多说,请接招!
二、业务场景
1、如何使用Thymeleaf作为模板邮件发送?
首先,给大家科普一下什么是Thymeleaf:
Thymeleaf 是新一代 Java 模板引擎,它类似于 Velocity、FreeMarker 等传统 Java 模板引擎,但是与传统 Java 模板引擎不同的是,Thymeleaf 支持 HTML 原型。
同时,SpringBoot 也提供了对 Thymeleaf 的自动化配置解决方案,因此在 SpringBoot 中使用 Thymeleaf 非常方便,也是我们今天要讲的内容。
有朋友就可能会问了,为啥不用FreeMarker 啊,不是也可以。对的,FreeMarker也可以做模板,但是使用Thymeleaf ,预览非常方便啊,可直接在浏览器中打开,它就是一个.html 为后缀的静态网页。
所以今天我们就不用老一套啦,直接教大家如何使用Thymeleaf作为邮件发送模板,好吧?咱们接着往下看!
2、引入Thymeleaf依赖
<!--Thymeleaf 静态模板jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
3、自定义静态模板
我就先随便定义一个mail.html为例,作为右键模板。你们要是懒的自己弄,也可以先拿我的试试水好吧。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head>
<meta charset="UTF-8">
<title>Thymeleaf邮件模板</title>
</head>
<body>
<p>这是一份学生名单:请查收</p>
<table border="1">
<tr>
<td>学校</td>
<td th:text="${school}"></td>
</tr>
<tr>
<td>班级</td>
<td th:text="${className}"></td>
</tr>
<tr>
<td>姓名</td>
<td th:text="${name}"></td>
</tr></table><div style="color: red;">以上是一份学生名单!</div>
</body>
</html>
4、发送邮件模板实现
a、首先我们先定义一个[静态模板邮件配置]的model参数体,注重代码需规范嘛。继承下mail这个vo,需要的小伙伴可以去上篇取,这里就不多重复了哈。
package com.example.demo.component.mail.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
* 静态模板邮件配置
*
* @author luoYong
* @version 1.0
* @date 2022/1/18 11:17
*/
@ApiModel(value = "静态模板邮件配置",description = "静态模板邮件配置")
public class ThymeleafMail extends Mail {
@ApiModelProperty("静态文件参数配置")
private List<Variable> variables;
@ApiModelProperty("静态文件名+后缀")
private String template;
public List<Variable> getVariables() {
return variables;
}
public void setVariables(List<Variable> variables) {
this.variables = variables;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
}
至于为什么要配置这两个参数,那是因为在你静态模板配置发送的时候,必须要指定context.setVariable() 与 templateEngine.process() 两个方法属性,也就是你对应静态模板的固定参数赋值,所以需要,所以我就直接按所需要的参数进行封装配置了,如果你们有更好的思路或者想法, 那就按你们自己的来,我写的也只是给个大致的参考意见。
b、接着就是定义一个类方法,核心是实现邮件静态模板发送。代码具体实现如下:
/**
* 配置静态模板
*/
public void sendThymeleafMail(ThymeleafMail model) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper msg = new MimeMessageHelper(mimeMessage, true); //邮件发送者
msg.setFrom(model.getSendMailAccount()); //邮件接收者
msg.setTo(model.getAcceptMailAccount()); //邮件主题
msg.setSubject(model.getTheme()); //邮件发送时间
msg.setSentDate(model.getSendTime());
Context context = new Context(); //添加模板数据
model.getVariables().forEach(p -> {
context.setVariable(p.getName(), p.getValue()); }); //给静态页面参数赋值
String process = templateEngine.process(model.getTemplate(), context);//指定静态页面模板
msg.setText(process, true);
javaMailSender.send(mimeMessage);
}
与发送附件邮件是一样的,都是使用了MimeMessage 与 MimeMessageHelper这两个邮件构建类和邮件收发信息类,具体详细用户可以参考官网给的文档,这里我就不一一进行深入讲解啦,还请小伙伴们见谅。
c、接下来,就是测试环节了,还是老地方,在MailTest测试类中,写一个test cese,测试该方法是否有报错等逻辑问题。如下测试用例,你们也可以自己定义邮件内容:
/**
* 配置静态模板
*/
@Testpublic void testSendThymeleafMail() throws MessagingException {
//模板对象初始化
ThymeleafMail mailModel = new ThymeleafMail();
mailModel.setTheme("这是一封测试邮件"); // 设置邮件主题
mailModel.setSendMailAccount("xxx@foxmail.com"); // 设置邮箱发送者
mailModel.setAcceptMailAccount("xxx@foxmail.com"); // 设置邮件接收者,可以有多个接收者
mailModel.setSendTime(new Date()); // 设置邮件发送日期
List<Variable> variables = new ArrayList<>();
Variable variable1 = new Variable();
variable1.setName("school");
variable1.setValue("清华附属小学");
Variable variable2 = new Variable();
variable2.setName("className");
variable2.setValue("六(1)班");
Variable variable3 = new Variable();
variable3.setName("name");
variable3.setValue("小罗");
variables.add(variable1);
variables.add(variable2);
variables.add(variable3);
mailModel.setVariables(variables);
mailModel.setTemplate("mail.html");//指定你刚才创建的静态页面
sendMailBuild.sendThymeleafMail(mailModel);
}
d、接下来就是运行testcase测试类 ,由此可见,静态模板邮件发送成功啦,邮件正文也是我所定义的模板格式!如下截图:
以上就已经测试完毕!虽然模板样式真有点丑,但这都不是主要关注点,主要是发送模板邮件成功了就行,毕竟有专业的前端工程师替我们 把关这部分模板样式的,所以就不需要我们后端开发操心啦,我的此篇教学任务也算是完成啦~冒昧问问,你们的测试通过了嘛?如果存在有发送失败或者发送报错的,请把你的问题打在评论区,咱们一起交流,我觉得一个人的力量是有限的,但是一群人的力量是无限的,互帮互助一直是中华的传统美德。
... ...
OK,以上就是这期所有的内容啦,如果有任何问题欢迎评论区批评指正,咱们下期见。
三、往期热门推荐
- springboot系列(一):如何创建springboot项目及启动
- springboot系列(二):yaml、properties两配置文件介绍及使用
- springboot系列(三):多环境切换,实例演示
- springboot系列(四):stater入门
- springboot系列(五):史上最最最全springboot常用注解
- springboot系列(六):mysql配置及数据库查询
- springboot系列(七):如何通过mybatis-plus实现接口增删改查
- springboot系列(八):mybatis-plus之条件构造器使用手册
- springboot系列(九):mybatis-plus之如何自定义sql
- springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
- springboot系列(十一):实现多数据源配置,开箱即用
- springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
- springboot系列(十三):如何实现发送普通邮件?你一定得会
- springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
- springboot系列(十五):如何实现静态邮件模板发送?你一定得会
- springboot系列(十六):如何实现发送邮件提醒,附完整源码
- springboot系列(十七):集成在线接口文档Swagger2
- springboot系列(十八):如何Windows安装redis?你玩过么
- springboot系列(十九):如何集成redis?不会我教你
- springboot系列(二十):如何通过redis实现手机号验证码功能
- ... ...
文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!