springboot系列(十五):如何实现静态邮件模板发送?你一定得会|超级详细,建议收藏

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot系列(十五):如何实现静态邮件模板发送?你一定得会|超级详细,建议收藏相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌

🎉简介:在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

【开发云】年年都是折扣价,不用四处薅羊毛

         嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

        续上篇,我们已经成功实现了邮件发送提醒,对吧,小伙伴跟着我一路看过来,是不是感觉轻松多了,毕竟篇幅我都不会很长。这样下去,每天学习一个知识点,一个月下来就是三十个知识点,日积月累,你就是下一个大佬啦。如果有小伙伴直接中途插入,还请麻烦先去看上几期的内容,要不然贸然跟着学,肯定要吃大亏,去我的专栏《springboot零基础入门教学》 从头开始跟进。

        今天我就给大家带来点与Thymeleaf模板引擎相关的知识点,通常有些邮件会有格式要求,就是格式是固定的,不知道你们生活场景中是否有遇到,像这种需求,我们应该怎么实现呢?好啦,废话不多说,请接招!

二、业务场景🔥

1️⃣概念

       首先,给大家科普一下什么是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,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

三、往期推荐🔥

四、文末🔥

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

【开发云】年年都是折扣价,不用四处薅羊毛

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

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

以上是关于springboot系列(十五):如何实现静态邮件模板发送?你一定得会|超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章

springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏

springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏

springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏

springboot系列(十六):如何实现发送邮件提醒,附完整源码(完结篇)

springboot系列:如何实现邮件发送提醒,你一定得会(准备篇)

springboot系列(十六):如何实现发送邮件提醒,附完整源码(完结篇)