SpringBoot 整合FreeMarker进行邮件发送
SpringBoot 整合FreeMarker进行邮件发送
在发送使用程序发送邮件时,如果邮件的内容过多,全部在代码里进行内容的拼接,会造成代码块很大,增大代码量,而且每次修改邮件模板的时候都要在代码里面进行修改,不是很便利;
因此才有了使用FreeMarker这个模板引擎来制作邮件模板,然后动态的填充变化的内容进去即可生成完整的邮件内容;下面是Springboot + freemarker来实现邮件模板动态生成邮件内容的演示;
预备知识:
什么是FreeMarker,可以参考官网http://freemarker.foofun.cn/index.html ;
因为我们这里只使用了它最基本的动态替换的功能,你可以简单理解为它像thymeleaf,JSP一样,就是一个模板引擎,基于模板动态生成最终文本数据即可。
1. 引入依赖
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-freemarkerartifactId> <version>2.3.5.RELEASEversion> dependency>
2. 配置freemarker
spring:
profiles:
active: dev
# freemarker默认存放路径
freemarker:
template-loader-path: classpath:/templates/freemarker/
3. 准备一个文件模板
文件名以 .ftl 为后缀,例如 helloworld.ftl;mailtest.ftl
DOCTYPE html>
<html>
<body>
<h4>${UserName},你好!h4>
<#list pets as pet>
<p>${pet}
#list>
body>
html>
DOCTYPE html>
<html>
<head><meta http-equiv=Content-Type content="text/html; charset=utf-8"/>head>
<div style=font-family: Arial>Dear Mr./Ms. ${username},br>
以下为最近7天内即将到期关闭的任务,请及时关注,谢谢
div><br>
<#list rows>
<table style=font-size:12px border=1 cellspacing=0 width=100% bordercolorlight=DarkGray bordercolordark=#efefef>
><th>代码th><th>任务名称th><th>到期日期th><th>剩余天数th>tr>
<#items as row>
<tr>
<td>${row.id}td>
<td>${row.name}td>
<td>${row.expirydate}td>
<td>${row.surplus}td>
tr>
#items>
table>
#list>
<br>
<div align="right" style="font-size: 11pt;line-height:2em;" >
<strong>ITstrong><br/>
If you have any IT related questions, please send your request to
<a href='http://www.baidu.com'>Baidu.a><br/>
<script> var day=new Date();document.write (day.toString());script>
div>
html>
4. 写个测试类验证
关键代码就两三行,代码里没有杂乱的字符串拼接,看起来会简洁很多。
1 import freemarker.template.Configuration;
2 import freemarker.template.Template;
3 import org.junit.jupiter.api.DisplayName;
4 import org.junit.jupiter.api.Test;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.boot.test.context.SpringBootTest;
7 import org.springframework.mail.javamail.JavaMailSender;
8 import org.springframework.mail.javamail.MimeMessageHelper;
9 import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
10
11 import javax.mail.internet.MimeMessage;
12 import java.util.*;
13
14
15 /**
16 * @author: Linwei
17 * @date 2021/4/7
18 * @Description:
19 */
20
21 @SpringBootTest
22 public class FreeMarkerTest {
23
24 // 自动注入FreeMarker配置类,用户获取模板
25 @Autowired
26 private Configuration configuration;
27
28 // 注入Spring发送邮件的工具类
29 @Autowired
30 private JavaMailSender sender;
31
32
33 @Test
34 @DisplayName("测试freemarker")
35 public void test() throws Exception{
36 // 定义个数据根节点
37 Map root = new HashMap<>();
38 // 往里面塞第一层节点
39 root.put("UserName","xiaoming");
40
41 String[] temp = new String[]{"dog","cat","tiger"};
42 List pets = new ArrayList<>();
43 Collections.addAll(pets,temp);
44 // 往里面塞个List对象
45 root.put("pets", pets);
46
47 Template template = configuration.getTemplate("helloworld.ftl");
48 String s = FreeMarkerTemplateUtils.processTemplateIntoString(template, root);
49 System.out.println("--->"+s);
50
51 MimeMessage mimeMessage = sender.createMimeMessage();
52 /** 设置邮件重要性级别 */
53 mimeMessage.setHeader("Importance","High");
54 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
55 helper.setFrom("Intranet.FM@test.com","personalTest");
56 helper.setTo("Zhangsan@test.com");
57 helper.setSubject("This is subject 主题");
58 helper.setText(s,true);
59 sender.send(mimeMessage);
60 }
61
62 @Test
63 @DisplayName("测试邮件模板")
64 public void testMailFreeMark() throws Exception{
65 List
文本效果:
DOCTYPE html>
<html>
<head><meta http-equiv=Content-Type content="text/html; charset=utf-8"/>head>
<div style=font-family: Arial>Dear Mr./Ms. zhangsan,br>
以下为最近7天内即将到期关闭的任务,请及时关注,谢谢
div><br>
<table style=font-size:12px border=1 cellspacing=0 width=100% bordercolorlight=DarkGray bordercolordark=#efefef>
<tr><th>代码th><th>任务名称th><th>到期日期th><th>剩余天数th>tr>
<tr>
<td>314016163491td>
<td>小白td>
<td>2021-04-21td>
<td>61td>
tr>
<tr>
<td>31400000024td>
<td>小黑td>
<td>2021-04-22td>
<td>2td>
tr>
table>
<br>
<div align="right" style="font-size: 11pt;line-height:2em;" >
<strong>ITstrong><br/>
If you have any IT related questions, please send your request to
<a href='http://www.baidu.com'>Baidu.a><br/>
<script> var day=new Date();document.write (day.toString());script>
div>
html>
邮件效果:
相关