SpringBoot框架+Thymeleaf模板引擎实现发送HTML格式邮件(可带附件)

spring-boot-mail

项目结构
在这里插入图片描述

1.Maven工程依赖坐标

注意:SpringBoot版本需为2.x
若spring boot版本为1.x,

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>thymeleaf-action</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <artifactId>spring-boot-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.0.7.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
</project>

2.SpringBoot配置文件

#开发环境下,关闭Thymeleaf缓存;生产环境需开启增强并发能力
spring.thymeleaf.cache=false 
#邮件服务器地址,已QQ邮箱为例
spring.mail.host=smtp.qq.com
#邮件服务器端口
spring.mail.port=587
#发件人邮箱地址
spring.mail.username=发件人邮箱地址
#发件人邮箱密码
spring.mail.password=发件人邮箱密码
# 构建授权信息,用于进行SMTP进行身份验证
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

3.邮件工具类

package org.example.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Map;

@Component
public class MailTool {
    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String senderMailAddress;

    @Autowired
    private TemplateEngine templateEngine;

    public void sendSimpleMail(Map<String, Object> valueMap) {
        MimeMessage mimeMessage = null;
        try {
            mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

            //设置发件人邮箱
            helper.setFrom(senderMailAddress);

            //设置收件人邮箱
            helper.setTo((String[]) valueMap.get("to"));

            //设置邮件标题
            helper.setSubject(valueMap.get("title").toString());

            //添加正文(使用thymeleaf模板)
            Context context = new Context();
            context.setVariables(valueMap);
            String content = templateEngine.process("mail", context);
            helper.setText(content, true);

            //添加附件
            if (valueMap.get("filePathList") != null) {
                String[] filePathList = (String[]) valueMap.get("filePathList");
                for (String filePath : filePathList) {
                    FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
                    String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
                    helper.addAttachment(fileName, fileSystemResource);
                }
            }
            //发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

4.测试代码

package org.example.utils;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.HashMap;
import java.util.Map;

import static org.junit.Assert.*;

@SpringBootTest
@RunWith(SpringRunner.class)
public class MailToolTest {
    @Autowired
    private MailTool mailTool;

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void sendSimpleMail() {
        String[] filePathList = new String[]{"文件地址1""文件地址2""文件地址3"};
        Map<String, Object> valueMap = new HashMap<String, Object>();
        valueMap.put("to", new String[]{"收件人1", "收件人2", "收件人3"});
        valueMap.put("title", "测试邮件标题");
        valueMap.put("content","测试邮件内容");
        valueMap.put("filePathList", filePathList);
        mailTool.sendSimpleMail(valueMap);
    }
}

附:注册成功邮件html代码模板

原文链接
在这里插入图片描述

<div style="background-color:#ECECEC; padding: 35px;">
    <table cellpadding="0" align="center"
           style="width: 600px; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;">
        <tbody>
        <tr>
            <th valign="middle"
                style="height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #42a3d3; background-color: #49bcff; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;">
                <font face="微软雅黑" size="5" style="color: rgb(255, 255, 255); ">注册成功! (阿里云)</font>
            </th>
        </tr>
        <tr>
            <td>
                <div style="padding:25px 35px 40px; background-color:#fff;">
                    <h2 style="margin: 5px 0px; ">
                        <font color="#333333" style="line-height: 20px; ">
                            <font style="line-height: 22px; " size="4">
                                亲爱的 123456</font>
                        </font>
                    </h2>
                    <p>首先感谢您加入本**站!下面是您的账号信息<br>
                        您的账号:<b>123456</b><br>
                        您的密码:<b>123456</b><br>
                        您的邮箱:<b>123@**.com</b><br>
                        您注册时的日期:<b>2019年06月17天23时33分20秒</b><br>
                        您注册时的IP:<b>221.230.56.12</b><br>
                        您注册的地址:<b>江苏省镇江市</b><br>
                        当您在使用本网站时,遵守当地法律法规。<br>
                        如果您有什么疑问可以联系管理员,Email: **@**.com</p>
                    <p align="right">BER分接口网</p>
                    <p align="right">2019年06月17号 23时33分20秒</p>
                    <div style="width:700px;margin:0 auto;">
                        <div style="padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;">
                            <p>此为系统邮件,请勿回复<br>
                                请保管好您的邮箱,避免账号被他人盗用
                            </p>
                            <p>©***</p>
                        </div>
                    </div>
                </div>
            </td>
        </tr>
        </tbody>
    </table>
</div>

已标记关键词 清除标记
<div style="color:#444444;"> <div style="color:#444444;"> <div style="color:#444444;"> 适用人群 <p style="color:#666666;"> 通用各大网易系,腾讯QQ系,新浪系,阿里系等主流邮箱;同时也适用于企业开发的企业邮箱,进行收件和发件。 </p> </div> <div style="color:#444444;"> 课程概述 <div style="color:#666666;"> 通用各大网易系,腾讯QQ系,新浪系,阿里系等主流邮箱;同时也适用于企业开发的企业邮箱,进行收件和发件。<br /> POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的<br /> SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。   SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。。<br /> 【开发者如何进行快速开发邮件发送系统???本课程系统进行快速研发,项目实战】 部分截图如下:完整版请查看课件或者视频 </div> <p style="color:#666666;"> <img src="https://img-bss.csdn.net/202003251515325375.jpg" alt="" /><img src="https://img-bss.csdn.net/202003251515448295.png" alt="" /><img src="https://img-bss.csdn.net/202003251515508077.png" alt="" /></p> </div> </div> </div> <p> </p> <p> </p><p> <br /></p> <p> <br /></p>
相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页