springboot+Thymeleaf实现发送Email模板邮件
在后台服务器中发送邮件已经是⼀个⾮常常⽤的功能了。通常来说虽然HTML并⾮是⼀个⾮常标准的信息格式,但是⾄少许多邮件客户端都⾄少⽀持⼀部分标记语⾔。 在这边教程中主要是关于教你如何在Spring Boot 应⽤中发送邮件以及使⽤⾮常简单强⼤的Thymeleaf模板引擎来制作邮件内容。
发送邮件效果展⽰:
本⽂⽀持邮件类型:
纯⽂本邮件
图⽚邮件
带附件的邮件
导⼊pom依赖
<!-- 发送邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
邮件服务器属性配置(Properties configuration)
通常情况下,如果所需要的依赖在 class path 中都是可⽤的话,这时候Spring会⾃动帮你注册⼀个默认实现的邮件发送服务 (default mail sender service)。 spring.mail.host 属性已经被⾃动定义了, 所有我们所需要做的事情就是把这个属性添加到我们应⽤的application.properties 配置⽂件中。
为了防⽌springboot项⽬打包成jar⽂件之后,读取不到⽂件,我们把图⽚和附件都放在服务器指定路径上,直接读取该⽂件。
#mail
spring.mail.host=smtp.163
spring.mail.username=*********@163
spring.mail.password=********
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.able=false
spring.mail.properties.mail.quired=false
#html template path (resources/templates/email/template.html)
templatePath=email/template
#mail image path
imagePath=D:\\image\\logo.jpg
#imagePath=/neworiental/web/cpbm/image/logo.jpg
邮件发送的⼯具类
*/
@Component
public class SendEmailUtils {
private final static Logger logger = Logger(SendEmailUtils.class);
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private TemplateEngine templateEngine;
/**
* html模板邮件
* @param from 发件⼈
* @param to 收件⼈
* @param subject 邮件主题
* @param emailParam 给模板的参数
* @param template html模板路径(相对路径)  Thymeleaf的默认配置期望所有HTML⽂件都放在 **resources/templates ** ⽬录下,以.html扩展名结尾。  * @param imagePath 图⽚/⽂件路径(绝对路径)
* @throws MessagingException
*/
public void thymeleafEmail(String from,String[] to, String subject,EmailParam emailParam,String template,String imgPath) throws MessagingException {    MimeMessage mimeMessage =ateMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
// 利⽤ Thymeleaf 模板构建 html ⽂本
Context ctx = new Context();
// 给模板的参数的上下⽂
ctx.setVariable("emailParam", emailParam);
// 执⾏模板引擎,执⾏模板引擎需要传⼊模板名、上下⽂对象
// Thymeleaf的默认配置期望所有HTML⽂件都放在 **resources/templates ** ⽬录下,以.html扩展名结尾。
// String emailText = templateEngine.process("email/templates", ctx);
String emailText = templateEngine.process(template, ctx);
mimeMessageHelper.setText(emailText, true);
// FileSystemResource logoImage= new FileSystemResource("D:\\image\\logo.jpg");
//绝对路径
FileSystemResource logoImage = new FileSystemResource(imgPath);
//相对路径,项⽬的resources路径下
//ClassPathResource logoImage = new ClassPathResource("static/image/logonew.png");
// 添加附件,第⼀个参数表⽰添加到 Email 中附件的名称,第⼆个参数是图⽚资源
//⼀般图⽚调⽤这个⽅法
mimeMessageHelper.addInline("logoImage", logoImage);
//⼀般⽂件附件调⽤这个⽅法
//  mimeMessageHelper.addAttachment("logoImage", resource);
javaMailSender.send(mimeMessage);
}
}
邮件参数实体类EmailParam.java
*/
public class EmailParam {
private String itemName;//产品名称
private String stuName;//学⽣姓名
private String updateContent;//变更操作
private String updatePerson;//操作⼈员
private String updateDate;//操作时间
private String remarks;//备注
//省略get、set⽅法
}
Html模板⽂件template.html
Thymeleaf的默认配置期望所有HTML⽂件都放在 **resources/templates ** ⽬录下,以.html扩展名结尾。在项⽬中的路径:**resources/templates/email/template.html
<!DOCTYPE html>
<html lang="en"
xmlns="/1999/xhtml"
xmlns:th="">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Siemens Sinnovation</title>
<style>
.button {
background-color: #4CAF50;
border-radius: 12px;
border: none;
color: white;
padding: 10px 25px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 18px;thyme
margin: 4px 2px;
cursor: pointer;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
.button:hover {
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
}
</style>
</head>
<body >
<table align="center" border="1" cellpadding="0" cellspacing="0" width="600px">
<tr>
<td>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600"
>
<tr>
<td align="center" >
<!--![](image/logo.png)-->
<img src='cid:logoImage' alt='前途出国' title='前途出国' style='width:183px height:47.50px'>
</td>
</tr>
<tr>
<td bgcolor="#ffffff" >
<h4>产品报名系统变更通知:</h4>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td colspan="2" >变更操作:<span th:text="${emailParam.updateContent}">啊啊啊地⽅规划局快乐靠⽅法如何加快了                            </tr>
<tr>
<td >产品名称:<span th:text="${emailParam.itemName}">的实际哦按⾮hi哦发货iOS恶</span></td>
</tr>
<tr>
<td >学⽣姓名:<span th:text="${emailParam.stuName}">啊啊啊</span></td>
</tr>
<tr>
<td >操作⼈员:<span th:text="${emailParam.updatePerson}">啊啊啊</span></td>
</tr>
<tr>
<td >操作时间:<span th:text="${emailParam.updateDate}">啊啊啊</span></td>
</tr>
<tr>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td >
Team Member:
</td>
</tr>
<tr th:each="member :${members}">
<td ><span
th:text="${member()}+', Email: '+${member()}"></span>
</td>
</tr>
</table>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td  align="center" >
<a class="button" href="www.baidu"  >查看详情</a>
</td>
</tr>
</table>
</tr>
</table>
</body>
</html>
Controller调⽤邮件⼯具类发送邮件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。