Spring Boot如何实现邮件发送

江枫思渺然 提交于 2020-03-04 08:16:29

准备工作

这里就以 QQ 邮箱来进行演示,使用 QQ 邮箱首先要申请开通 POP3/SMTP 服务或者 IMAP/SMTP 服务,这里介绍下 QQ 邮箱如何开通 POP3/SMTP 服务或者 IMAP/SMTL服务的步骤
1.登陆QQ邮箱,先点击顶部的设置按钮和账户按钮,如下图所示:
在这里插入图片描述
在这里插入图片描述
2.在账户的最下方找到 POP3/SMTP 服务,单击后面的 开启 按钮,如下图所示:
在这里插入图片描述
然后它会提示你发送一条短信,你按照它的要求发一条短信,操作成功后,你会获得一个授权码,授权码保存下来等会要用到

1.发送简单邮件

1.首先搭建SpringBoot环境,添加如下依赖:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2.在 application.properties 文件中添加邮件的基本配置,代码如下:

# 配置 smtp 服务器地址
spring.mail.host=smtp.qq.com
# smtp 服务器的端口
spring.mail.port=587
# 配置邮箱用户名
spring.mail.username=你自己的邮箱
# 配置申请到的授权码
spring.mail.password=这里填写刚才短信申请到的授权码
# 配置邮件编码
spring.mail.default-encoding=UTF-8
# 配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
# 表示开启 DEBUG 模式
spring.mail.properties.mail.debug=true

3.测试

@SpringBootTest
class SendqqemailApplicationTests {
	@Autowired
    JavaMailSender javaMailSender;
    
     /**
     *  发送简单邮件
     */
    @Test
    public void sendSimpleMail() {
        SimpleMailMessage msg = new SimpleMailMessage();    //构建一个邮件对象
        msg.setSubject("这是一封测试邮件"); // 设置邮件主题
        msg.setFrom("bai211425401@qq.com"); // 设置邮箱发送者
        msg.setTo("1712900841@qq.com"); // 设置邮件接收者,可以有多个接收者
        msg.setSentDate(new Date());    // 设置邮件发送日期
        msg.setText("这是测试邮件的正文");   // 设置邮件的正文
        javaMailSender.send(msg);
    }
}

这里面要注意,当你设置邮件发送者时 ”这个邮件发送者“必须是你application.properties 中配置的邮件账户
执行此方法,即可看到邮件发送成功,如下图所示:

在这里插入图片描述

2.发送带附件的邮件

附件可以是图片,也可以是普通文件,都可以支持发送

	/**
     *  发送带附件的邮件
     * @throws MessagingException
     */
    @Test
    public void sendAttachFileMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("这是一封测试邮件");
        helper.setFrom("bai211425401@qq.com");
        helper.setTo("1712900841@qq.com");
        helper.setSentDate(new Date());
        helper.setText("这是测试邮件的正文");
        helper.addAttachment("fileimg.png",new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\1.png"));
        javaMailSender.send(mimeMessage);
    }

这里使用 MimeMessageHelper 简化了邮件配置,他的构造方法的第二个参数 true 表示构造一个 multipart message 类型的邮件,multiaprt message 类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富,最后通过 addAttachment 方法添加附件,结果如下图:
在这里插入图片描述

3.发送带图片资源的邮件

图片资源和附件的区别就在于 图片资源是放在邮件正文中的,就是一打开邮件就能看到图片

	/**
     *  发送带图片资源的邮件
     * @throws MessagingException
     */
    @Test
    public void sendImgResMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("这是一封测试邮件");
        helper.setFrom("bai211425401@qq.com");
        helper.setTo("1712900841@qq.com");
        helper.setSentDate(new Date());
        helper.setText("<p>hello 大家好,我是一封测试邮件,我包含了两张图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true);
        helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\1.png")));
        helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\2.png")));
        javaMailSender.send(mimeMessage);
    }

效果如下图所示:
在这里插入图片描述

4.使用 Freemaker 作为邮件模板

1.首先引入 Freemaker 依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
2.创建 Freemaker 模板

在 resources/templates 目录下创建一个 mail.ftl 作为邮件发送模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Freemaker邮件模板</title>
</head>
<body>
<p>hello 欢迎加入 Spring Boot 大家族,您的入职信息如下:</p>
<table border="1">
    <tr>
        <td>姓名</td>
        <td>${username}</td>
    </tr>
    <tr>
        <td>工号</td>
        <td>${num}</td>
    </tr>
    <tr>
        <td>薪水</td>
        <td>${salary}</td>
    </tr>
</table>
<div style="color: red;">一起努力创造辉煌</div>
</body>
</html>
3.进行测试
	/**
     *  使用 Freemaker 作为邮件模板
     * @throws MessagingException
     */
    @Test
    public void sendFreemakerMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("这是一封测试邮件");
        helper.setFrom("bai211425401@qq.com");
        helper.setTo("1712900841@qq.com");
        helper.setSentDate(new Date());
        // 构建 Freemaker 的基本配置
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
        // 配置模板位置
        ClassLoader loader = SendqqemailApplication.class.getClassLoader();
        configuration.setClassLoaderForTemplateLoading(loader,"templates");
        // 加载模板
        try {
            Template template = configuration.getTemplate("mail.ftl");
            Employee entity = new Employee("张三",1001,6500.0);
            StringWriter out = new StringWriter();
            // 模板渲染,渲染的结果将被保存到 out 中,将 out 中的 html 字符串发送即可
            template.process(entity,out);
            helper.setText(out.toString(),true);
            javaMailSender.send(mimeMessage);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

效果图如下:
在这里插入图片描述

5.使用 Thymeleaf 作为邮件模板

1.首先引入 Thymeleaf 依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
2.创建 Thymeleaf 邮件模板

在 resources/templates 目录下创建一个 mail.html 作为邮件发送模板:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf邮件模板</title>
</head>
<body>
<p>hello 欢迎加入 Spring Boot 大家族,您的入职信息如下:</p>
<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="${username}"></td>
    </tr>
    <tr>
        <td>工号</td>
        <td th:text="${num}"></td>
    </tr>
    <tr>
        <td>薪水</td>
        <td th:text="${salary}"></td>
    </tr>
</table>
<div style="color: red;">一起努力创造辉煌</div>
</body>
</html>
3.进行测试
	/**
     *  使用 Thymeleaf 作为邮件模板
     * @throws MessagingException
     */
    @Test
    public void sendThymeleafMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("这是一封测试邮件");
        helper.setFrom("bai211425401@qq.com");
        helper.setTo("1712900841@qq.com");
        helper.setSentDate(new Date());
        Context context = new Context();
        context.setVariable("username","李四");
        context.setVariable("num","1002");
        context.setVariable("salary",8000);
        String process = templateEngine.process("mail.html",context);
        helper.setText(process,true);
        javaMailSender.send(mimeMessage);
    }

效果图如下:
在这里插入图片描述

结语

看完对你有帮助的话点个赞再走吧!
有问题欢迎留言讨论!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!