SpringBoot 发送邮件的方式(阿里云邮箱)

2022-02-17 0 By admin

使用 SpringBoot 发送邮件入门介绍,项目使用中,请自行封装。
使用的是 Spring 框架提供的 JavaMailSender 接口实现邮件发送;如果想要 html 页面渲染的邮件,可以结合 thymeleaf使用。

一、基本邮件发送实现

1.1、添加依赖包

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

1.2、设置配置信息

spring:
  mail:
    protocol: smtps
    # 配置 SMTP 服务器地址
    host: smtp.qiye.aliyun.com
    # 发送者邮箱
    username: user@emaildomain.com
    # 配置密码
    password: passwordWord
    # 端口号465或587
    #port: 465
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
          socketFactory:
            port: 465
          port: 465
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true

1.3、发送普通邮件示例

  @Autowired
  JavaMailSender javaMailSender;
  
  @Test
  public void sendSimpleMail() {
      // 构建一个邮件对象
      SimpleMailMessage message = new SimpleMailMessage();
      // 设置邮件主题
      message.setSubject("这是一封测试邮件");
      // 设置邮件发送者,这个跟application.yml中设置的要一致
      message.setFrom("7*****9@qq.com");
      // 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
    	// message.setTo("10*****16@qq.com","12****32*qq.com");
      message.setTo("10*****16@qq.com");
      // 设置邮件抄送人,可以有多个抄送人
      message.setCc("12****32*qq.com");
      // 设置隐秘抄送人,可以有多个
      message.setBcc("7******9@qq.com");
      // 设置邮件发送日期
      message.setSentDate(new Date());
      // 设置邮件的正文
      message.setText("这是测试邮件的正文");
      // 发送邮件
      javaMailSender.send(message);
  }

二、使用 Thymeleaf 作邮件模板

推荐在 Spring Boot 中使用 Thymeleaf 来构建邮件模板。因为 Thymeleaf 的自动化配置提供了一个 TemplateEngine,通过 TemplateEngine 可以方便的将 Thymeleaf 模板渲染为 HTML ,同时,Thymeleaf 的自动化配置在这里是继续有效的 。

2.1、引入 Thymeleaf 依赖

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

2.2、创建Thymeleaf模板

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</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: #ff1a0e">一起努力创造辉煌</div>
</body>
</html>

2.3、邮件发送示例

 @Autowired
 TemplateEngine templateEngine;

 @Test
 public void sendThymeleafMail() throws MessagingException {
     MimeMessage mimeMessage = javaMailSender.createMimeMessage();
     MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
     helper.setSubject("这是一封测试邮件");
     helper.setFrom("790933839@qq.com");
     helper.setTo("1032065316@qq.com");
	//helper.setCc("37xxxxx37@qq.com");
	//helper.setBcc("14xxxxx098@qq.com");
     helper.setSentDate(new Date());
   	// 这里引入的是Template的Context
     Context context = new Context();
   	// 设置模板中的变量
     context.setVariable("username", "javaboy");
     context.setVariable("num","000001");
     context.setVariable("salary", "99999");
   	// 第一个参数为模板的名称
     String process = templateEngine.process("hello.html", context);
   	// 第二个参数true表示这是一个html文本
     helper.setText(process,true);
     javaMailSender.send(mimeMessage);
 }