使用Spring Boot 发送邮件

3,189 阅读2分钟

Spring Boot Mail

在Spring Boot中发送邮件,需要使用Spring提供的org.springframework.mail.javamail.JavaMailSender,它提供了许多简易的用法,可以发送简单邮件,HTML格式邮件,带附件的邮件及模板邮件。

1创建Spring Boot工程并引入依赖

创建Spring Boot工程

添加依赖: spring-boot-starter-mail

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

2 邮件配置

在application.yml配置文件中添加邮件相关配置(以163邮箱为例)

spring:
  ## 邮件配置
  mail:
    host: smtp.163.com
    username: 邮箱
    password: 邮箱授权密码
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

3 发送简单邮件

使用Spring Boot发送简单邮件

@Service(value = "jmsService")
public class JmsService {

    @Autowired
    private JavaMailSender jms;

    public void sendSimpleMail(String sender, String receiver, String subject, String text) {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(sender);       // 发送者
            message.setTo(receiver);       // 接受者
            message.setSubject(subject);   // 邮件主题
            message.setText(text);         // 邮件正文

            jms.send(message);
        } catch (Exception exception) {
            // TODO 异常处理
        }
    }
}

4 发送HTML格式邮件

使用Spring Boot发送HTML格式邮件

@Service(value = "jmsService")
public class JmsService {

    @Autowired
    private JavaMailSender jms;

    public void sendHtmlMail(String sender, String receiver, String subject, String htmlText) {
        MimeMessage message = null;

        try {
            message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);       // 发送者
            helper.setTo(receiver);       // 接受者
            helper.setSubject(subject);   // 邮件主题

            if (StringUtil.isNotEmpty(htmlText)) {
                StringBuffer sb = new StringBuffer(htmlText);
                helper.setText(sb.toString(), true);  // HTML
            }

            jms.send(message);
        } catch (Exception exception) {
            // TODO 异常处理
        }
    }
}

5 发送带附件的邮件

使用Spring Boot发送带附件的邮件

@Service(value = "jmsService")
public class JmsService {

    @Autowired
    private JavaMailSender jms;

    public void sendSimpleMailWithAttachment(String sender, String receiver, String subject, String filePath) {
        MimeMessage message = null;

        try {
            message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);             // 发送者
            helper.setTo(receiver);             // 接受者
            helper.setSubject(subject);         // 邮件主题
            helper.setText("详情参见附件内容!");  // 邮件正文


            File file = new File(filePath);
            FileSystemResource fileResource = new FileSystemResource(file);
            helper.addAttachment(file.getName(), fileResource);  // 附件

            jms.send(message);
        } catch (Exception exception) {
            // TODO 异常处理
        }
    }
}

6 发送模板邮件

使用Spring Boot发送模板邮件,以thymeleaf为例

6.1 引入模板引擎

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

6.2 thymeleaf配置

spring:
  ## thymelea模板配置
  thymeleaf:
    #thymeleaf 所在路径
    prefix: classpath:/templates/
    #thymeleaf 后缀
    suffix: .html
    #thymeleaf 采用的标准
    mode: HTML5
    #thymeleaf 编码格式
    encoding: UTF-8

6.3 新建邮件模板

在项目resources/templates目录下新建邮件模板template.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>注册码</title>
</head>

<body>
    您好,您的注册码为<span th:text="${code}"></span>,请在5分钟内使用完成操作。
</body>

</html>

6.4 发送模板邮件

@Service(value = "jmsService")
public class JmsService {

    @Autowired
    private JavaMailSender jms;

    @Autowired
    private TemplateEngine templateEngine;

    public void sendTemplateEmail(String sender, String receiver, String subject, String code) {
        MimeMessage message = null;

        try {
            message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);              // 发送者
            helper.setTo(receiver);              // 接受者
            helper.setSubject(subject);          // 邮件主题

            Context context = new Context();
            context.setVariable("code", code);   // 模板邮件参数

            String template = templateEngine.process("template", context);
            helper.setText(template, true);

            jms.send(message);
        } catch (Exception exception) {
            // TODO 异常处理
        }
    }
}