Springboot系列(十二):如何代码实现发送邮件提醒,你一定得会!(下篇)

599 阅读5分钟

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介: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);
}

       与发送附件邮件是一样的,都是使用了MimeMessageMimeMessageHelper这两个邮件构建类和邮件收发信息类,具体详细用户可以参考官网给的文档,这里我就不一一进行深入讲解啦,还请小伙伴们见谅。

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,以上就是这期所有的内容啦,如果有任何问题欢迎评论区批评指正,咱们下期见。

三、往期热门推荐

文末🔥

如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!