4、SpringBoot------邮件发送(2)

开发工具: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");
     }

测试结果截图:

图片描述

                      2018-07-16