Spring Boot的邮件发送

【第一部分】历史文章:
SpringBoot总结(一)——第一个SpringBoot项目
SpringBoot总结(二)——Spring Boot的自动配置
SpringBoot总结(三)——SpringBoot的配置文件
SpringBoot总结(四)——@Value和@ConfigurationProperties的区别
SpringBoot总结(五)——@PropertySource注解与@ImportResource注解
SpringBoot总结(六)——SpringBoot配置文件占位符
SpringBoot总结(七)——Profile的使用
SpringBoot总结(八)——配置文件的加载位置
SpringBoot总结(九)——@Conditional注解与自动配置报告
SpringBoot总结(十)——SpringBoot+Mybatis实现数据库的CRUD(从创建到实现【超详细附代码】)
SpringBoot总结(十一)——SpringBoot的静态资源映射规则
SpringBoot总结(十二)——登录界面的实现
SpringBoot总结(十三)——修改嵌入式Servlet容器配置
SpringBoot总结(十四)——SpringBoot整合JDBCTemplate及Druid连接池
SpringBoot总结(十五)——接口架构风格(RESTful)


Spring Boot的邮件发送

邮件发送是一个常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。下面就来详细介绍Spring Boot中如何进行发送邮件的;以及介绍几种不同的邮件的发送方式:分别是发送简单邮件、发送带有附件的邮件、发送带有图片的邮件、以及使用两种模板引擎来构建邮件模板等。



前言

下面将进行介绍,几种不同的邮件的发送方式。


一、发送前的准备

1.登录QQ邮箱

登录QQ邮箱后,找到顶部的设置按钮——>账户按钮。如下图所示:
在这里插入图片描述

2.开启服务,获取授权码

在账户选项中,找到POP3/SMTP服务,点击开启,如下图所示:
在这里插入图片描述
注:这里我已经开启过了,若之前没有开启,点击开启按钮后,按照步骤,将会获取一个授权码,该授权码在后面将会用到的哦。

二、邮件发送

1.环境搭建

创建一个springboot项目,具体创建过程这里不再介绍;项目创建完成后,添加以下依赖:

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

完成后,在配置文件application.properties中配置邮件的基本信息,如下所示

#用户账号
spring.mail.username=1154146166@qq.com

#密码
spring.mail.password=上面获取的授权码

#服务器地址
spring.mail.host=smtp.qq.com

#配置端口
spring.mail.port=465

#配置默认编码
spring.mail.default-encoding=UTF-8

#开启debug,方便开发者查看邮件发送的日志
spring.mail.properties.mail.debug=true

spring.mail.properties.mail.smtp.ssl.enable=true

完成这些配置后,基本的邮件发送环境就搭建成功了。

2.发送简单邮件

package com.example;

import org.junit.jupiter.api.Test;
import org.springframework.beans.Mergeable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@SpringBootTest
class SpringbootMailApplicationTests {

    @Autowired
    JavaMailSender javaMailSender;

    @Test
    void contextLoads() {

    }

    @Test
    void  sendSimpleMailTest() {

        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject("通知——今天不上班");   //邮件的主题
        simpleMailMessage.setText("大家休息一天!!!");   //邮件的内容
        simpleMailMessage.setTo("1154146166@qq.com");   //邮件的收件人
        simpleMailMessage.setFrom("1154146166@qq.com");  //邮件的发送者
        simpleMailMessage.setCc("1154146166@qq.com");    //邮件的抄送人
        javaMailSender.send(simpleMailMessage);

    }

}

执行该方法,即可看到邮件发送成功。如下图所示:
在这里插入图片描述

3.发送带有附件的邮件

 @Test
    void SendAttachFileMailTest() throws Exception{

        File file = new File("E:\\mail\\mailTest.txt");
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        
        helper.setSubject("通知——今天不上班");     //邮件的主题
        helper.setText("<b style='color:red'>大家休息一天!!!</b>",true);    //邮件的内容
        helper.setTo("1154146166@qq.com");    //邮件的收件人
        helper.setFrom("1154146166@qq.com");    //邮件的发送者
       
        helper.addAttachment(file.getName(),file);  // 上传文件
        
        javaMailSender.send(mimeMessage);


    }

注:使用MimeMessageHelper简化了邮件的配置,他的构造方法的第二个参数为true,表示构造一个multipart message类型的邮件,multipart message类型的邮件包含多个正文,附件,以及内嵌资源,邮件的表现形式更加的丰富。最后是通过addAttachment方法添加附件。
执行该方法,即可看到邮件发送成功。如下图所示:
在这里插入图片描述

4.发送带有图片资源的邮件

/**
     * (3)发送带有图片资源的文件
     */
    @Test
    void SendMailWithImg() throws Exception {
        File file = new File("E:\\mail\\mailTest.png");
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom("1154146166@qq.com");  // //邮件的发送者
        helper.setTo("1154146166@qq.com");    //邮件的收件人
        helper.setSubject("通知——今天不上班");     //邮件的主题
        helper.setText("<div>大家休息一天!!!"+"<div><img src='cid:p01'/></div>"+"</div>",true);    //邮件的内容
        FileSystemResource resource = new FileSystemResource(file);
        helper.addInline("p01", resource);    //将资源加入邮件对象中
        javaMailSender.send(mimeMessage);
    }
  • 注意:在调用MimeMessageHelper中的setText方法的时候,第二个参数true表示:邮件正文是HTML格式的,不传该参数,则默认为false。

执行该方法,即可看到邮件发送成功。如下图所示:
在这里插入图片描述

5.使用FreeMarker构建邮件模板

对于格式较为复杂的邮件,若采用字符串进行HTML拼接的方式,不但容易出错,而且不易于维护;下面使用HTML模板可以很好的解决这个问题。当然,使用FreeMarker构建邮件模板,首先要添加FreeMarker的依赖:

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

在resources目录templates目录下面创建mailtemplate.ftl文件作为邮件模板,这里演示的模板比较简单,显示了邮件的内容(可以根据实际的需要定制较为复杂的模板):


<div>
    <p>邮件内容:</p>
    <b> ${msg}</b>
</div>

然后创建了一个实体类,为了演示方便,只定义了msg属性。

package com.example.pojo;

public class Message {
    private String msg;
    public Message() {

    }
    public Message(String msg) {
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

 @Autowired
    private FreeMarkerConfigurer configurer;
 @Test
    void  SendHtmlMailTest() throws Exception{

        Template template = configurer.getConfiguration().getTemplate("mailtemplate.ftl");
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        StringWriter mail = new StringWriter();
        Message message = new Message();
        message.setMsg("今天休息。。。");
        template.process(message, mail);
        helper.setFrom("1154146166@qq.com");  // //邮件的发送者
        helper.setTo("1154146166@qq.com");    //邮件的收件人
        helper.setSubject("通知——今天不上班");     //邮件的主题
        helper.setText(mail.toString(),true);    //邮件的内容
        javaMailSender.send(mimeMessage);
    }

执行该方法,即可看到邮件发送成功。如下图所示:
在这里插入图片描述

6.使用Thymeleaf构建邮件模板

既然可以使用FreeMarker来进行构建邮件的模板,当然也可以使用hymeleaf来进行构建邮件的模板!!!
首先添加依赖:

  <!--引入thymeleaf依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

然后在resources目录templates目录下面创建mailtemplate.html文件作为邮件模板;这里演示的模板比较简单,显示了邮件的内容(可以根据实际的需要定制较为复杂的模板):

<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>演示邮件</title>
</head>
<body>
<p th:text="${msg}"></p>
</body>
</html>
 /**
     * (5)使用Thymeleaf构建邮件模板
     */
     
    @Autowired
    TemplateEngine templateEngine;
    
    @Test
    void SendHtmlMailTest2() throws Exception {

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

        Context context = new Context();

        context.setVariable("msg","今天大家休息,不上班。。。");
        String mail = templateEngine.process("mailtemplate.html", context);

        helper.setFrom("1154146166@qq.com");  // //邮件的发送者
        helper.setTo("1154146166@qq.com");    //邮件的收件人
        helper.setSubject("通知——今天不上班");     //邮件的主题
        helper.setText(mail,true);    //邮件的内容
        javaMailSender.send(mimeMessage);

    }

注:不同于FreeMarker,Thymeleaf使用了TemplateEngine来对模板进行渲染。通过Context进行构造模板中变量需要的值,使用这种方式比FreeMarker构建邮件模板更加的方便。
执行该方法,即可看到邮件发送成功。如下图所示:
在这里插入图片描述


总结

以上分别介绍了几种不同的邮件的发送方式,以及如何来进行构建邮件模板等。希望通过以上例子能给予大家帮助。😊

关于本项目代码获取方式:关注+私信并回复:【邮件发送】即可获取哦!!!
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小Java开发者

“是一种鼓励,你懂的”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值