SpringBoot - 使用JavaMailSender发送邮件教程3(使用HTML邮件模版)
作者:hangge | 2020-02-08 08:10
对于格式复杂的邮件,如果像前文一样采用字符串进行 HTML 拼接,不但容易出错,而且不易维护,使用 HTML 模版可以很好地解决这一问题。我们既可以使用 FreeMarker 构建邮件模版,也可以使用 Thymeleaf 构建邮件模版,下面通过样例进行演示。
(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。
(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。
五、使用 FreeMarker 构建邮件模版
1,添加依赖
编辑项目的 pom.xml 文件,加入 FreeMarker 依赖:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2,改造 MailService
这里对前文封装的邮件发送类 MailService 做个改造,增加一个可以发送 html 内容的方法:@Component
public class MailService {
// JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可
@Autowired
JavaMailSender javaMailSender;
// 发送带HTML内容的邮件
// 方法4个参数分别表示:邮件发送者、收件人、邮件主题、html格式的邮件内容
public void sendHtmlMail(String from, String to, String subject, String content){
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(to);
helper.setFrom(from);
helper.setSubject(subject);
helper.setText(content, true);
javaMailSender.send(message);
} catch (MessagingException e) {
System.out.println("发送失败");
}
}
}
3,创建邮件模版
在项目 resources 目录下创建 ftl 目录作为模版存放位置,在该目录下创建 mailtemplate.ftl 作为邮件模版,内容如下:
<div>邮箱激活</div>
<div>您的注册信息是:
<table border="1">
<tr>
<td>用户名</td>
<td>${username}</td>
</tr>
<tr>
<td>用户性别</td>
<td>${sex}</td>
</tr>
</table>
</div>
<div>
<a href="http://www.hangge.com">核对无误请点击本链接激活邮箱</a>
</div>
4,创建实体类
接着创建一个简单的 User 实体类,后面会将这个实体类对象内容填充到模版中,并通过邮件发送。@NoArgsConstructor
@Setter
@Getter
public class User {
private String username;
private String sex;
}
5,开始测试
(1)首先我们创建一个 Controller 来发送邮件,这次我们通过 FreeMarker 模版渲染出邮件正文内容:@RestController
public class HelloController {
@Autowired
MailService mailService;
//
@GetMapping("/hello")
public void hello() {
try {
// 首先配置 FreeMarker 模版位置
Configuration configuration =
new Configuration(Configuration.VERSION_2_3_0);
ClassLoader loader = DemoApplication.class.getClassLoader();
configuration
.setClassLoaderForTemplateLoading(loader,"ftl");
// 配置模版文件
Template template = configuration.getTemplate("mailtemplate.ftl");
// 结合 User 对象渲染模版
StringWriter mail = new StringWriter();
User user = new User();
user.setUsername("hangge");
user.setSex("男");
template.process(user, mail);
// 将渲染结果发送出去
mailService.sendHtmlMail("123@qq.com",
"service@hangge.com",
"这个是邮件的标题",
mail.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。

六、使用 Thymeleaf 构建邮件模版
1,添加依赖
编辑项目的 pom.xml 文件,加入 Thymeleaf 依赖:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2,封装邮件发送类 MailService
MailService 里的代码同上面一样,就是提供一个可以发送 html 内容的方法:@Component
public class MailService {
// JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可
@Autowired
JavaMailSender javaMailSender;
// 发送带HTML内容的邮件
// 方法4个参数分别表示:邮件发送者、收件人、邮件主题、html格式的邮件内容
public void sendHtmlMail(String from, String to, String subject, String content){
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(to);
helper.setFrom(from);
helper.setSubject(subject);
helper.setText(content, true);
javaMailSender.send(message);
} catch (MessagingException e) {
System.out.println("发送失败");
}
}
}
3,创建邮件模版
Thymeleaf 模版默认位置是 resources/templates,我们在该目录下创建一个邮件模版 mailtemplate.html,内容如下:<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>邮件</title>
</head>
<body>
<div>邮箱激活</div>
<div>您的注册信息是:
<table border="1">
<tr>
<td>用户名</td>
<td th:text="${username}"></td>
</tr>
<tr>
<td>用户性别</td>
<td th:text="${sex}"></td>
</tr>
</table>
</div>
<div>
<a href="http://www.hangge.com">核对无误请点击本链接激活邮箱</a>
</div>
</body>
</html>
4,开始测试
(1)首先我们创建一个 Controller 来发送邮件,这次我们通过 Thymeleaf 模版渲染出邮件正文内容:
注意:不同于 FreeMarker,Thymeleaf 提供了 TemplateEngine 来对模版进行渲染,通过 Context 构造模版中变量需要的值,这种方式比 FreeMarker 构建邮件模版更加方便。
@RestController
public class HelloController {
@Autowired
MailService mailService;
@Autowired
TemplateEngine templateEngine;
@GetMapping("/hello")
public void hello() {
// 通过 Context 构造模版中变量需要的值
Context ctx = new Context();
ctx.setVariable("username", "hangge");
ctx.setVariable("sex", "男");
// 使用TemplateEngine 对模版进行渲染
String mail = templateEngine.process("mailtemplate.html", ctx);
// 将渲染结果通过邮件发出
mailService.sendHtmlMail("380552225@qq.com",
"yuhang0385@163.com",
"这个是邮件的标题",
mail);
}
}
(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。
全部评论(0)