开发工具:STS
代码下载链接:https://github.com/theIndoorTrain/Springboot/tree/0d6194d6ea2d7f4e19791a3d3f3167f861f6453d
前言:
在上一篇博客中,我们写了简单邮件的发送和带附件的邮件发送。
在本节里,我们来写模板邮件发送。
模板邮件是什么呢?
模板邮件:
我们定义好邮件的主题,封装进一个html中,然后动态的改变其中的某些值,比如用户名。。。。。
然后我们的邮件内容,就不需要每次发送都要定义了。
而且这种方式,有利于系统的解耦,更方便模板邮件内容的完善与更改。
在sproingboot中,支持的前端模板有FreeMarker和Thymeleaf。
这里我们用Thymeleaf来实现。
模板邮件发送
我们假设发送给用户一封激活邮件
1.添加依赖:
<!--添加thymeleaf依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.添加模板:
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" >
<title>账号激活邮件</title>
</head>
<body>
您好,这是验证邮件,请点击下面的链接完成验证,
<a href="#" th:href="@{ http://www.xm.com/eamil/{id}(id=${id}) }">激活账号</a>
</body>
</html>
3.定义发送模板邮件业务接口:
/**
* 发送模板邮件
* @param to:收件人
* @param subject: 标题
* @param info:模板名
*/
void sendTemplateMail(String to,String subject,String info);
4.实现发送模板邮件业务:
实现过程:
(1)实现接口
(2)定义模板解析器
(3)定义参数
(4)绑定参数到模板
(6)解析模板为字符串
(6)封装信件
(7)发送邮件
package com.xm.service.impl;
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import com.xm.service.EmailService;
/**
* 邮件发送业务实现
* @author xm
*
*/
@Service
public class EmailServiceImpl implements EmailService {
//获取发送者信息
@Value("${mail.from.addr}")
private String from;
//定义邮件发送者
@Autowired
private JavaMailSender sender;
@Autowired
//模板解析
private TemplateEngine templateEngine;
@Override
public void sendTemplateMail(String to, String subject, String info) {
//创建多用途互联网邮件
MimeMessage message = sender.createMimeMessage();
try {
//封装多用途互联网邮件
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
//封装模板参数
Context context = new Context();
context.setVariable("id", 1);
//解析模板
String content = templateEngine.process(info, context);
//true:识别Html
helper.setText(content, true);
} catch (Exception e) {
e.printStackTrace();
}
sender.send(message);
}
}
5.定义测试:
@Test
/**
* 发送模板邮件
*/
public void sendTemplateMail() {
emailService.sendTemplateMail("1373572467@qq.com", "激活邮件","EmailActivation");
}