Spring Boot基于邮件模板的JavaMail

邮件是现代通信中一种重要的形式,通过电子邮件,我们可以与世界各地的人们进行快速而便捷的沟通。在很多场景下,我们需要通过代码自动化地发送邮件,而不是手动编写邮件。在Java开发中,我们可以使用JavaMail库来实现邮件的发送功能。本文将介绍使用Spring Boot框架基于邮件模板的JavaMail库来发送邮件的方法,并提供相应的代码示例。

准备工作

在开始之前,我们需要准备一个Spring Boot项目。如果您还没有安装Spring Boot,可以按照[官方文档](

添加依赖

首先,我们需要在pom.xml文件中添加JavaMail和Thymeleaf的依赖:

<dependencies>
    <!-- ...其他依赖... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

配置邮件服务器

接下来,我们需要在application.properties文件中配置邮件服务器的相关信息,包括SMTP服务器地址、端口号、账号和密码等。例如:

spring.mail.host=smtp.example.com
spring.mail.port=587
spring.mail.username=your-email@example.com
spring.mail.password=your-password

创建邮件模板

为了使邮件内容更加美观和灵活,我们可以使用Thymeleaf模板引擎来创建邮件模板。Thymeleaf模板引擎支持在HTML文件中嵌入动态数据,以及使用条件语句和循环语句等功能。我们可以在resources/templates目录下创建邮件模板文件。例如,我们创建一个名为email-template.html的模板文件:

<!DOCTYPE html>
<html xmlns:th="
<head>
    <meta charset="UTF-8">
    <title>邮件模板</title>
</head>
<body>
    
    <p th:text="${content}"></p>
</body>
</html>

在这个模板中,我们使用Thymeleaf的语法来动态地填充标题和内容。

发送邮件

现在我们开始编写发送邮件的Java代码。首先,我们需要在Spring Boot的主类上添加@EnableScheduling注解,以启用定时任务的功能。然后,在一个新的类中创建一个方法,用于发送邮件。例如,我们创建一个名为EmailSender的类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class EmailSender {

    @Autowired
    private JavaMailSender mailSender;

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

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

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

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

    @Scheduled(cron = "${spring.mail.schedule}")
    public void sendEmail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText("这是一封测试邮件");
        mailSender.send(message);
    }
}

在这个类中,我们使用了JavaMailSender来发送邮件。在sendEmail方法中,我们创建了一个SimpleMailMessage对象,并设置了邮件的基本信息,包括发件人、收件人、主题和内容。然后,我们通过调用mailSender.send方法来发送邮件。

邮件模板的动态内容

如果我们想要在邮件中使用动态内容,而不是固定的文本,我们可以修改sendEmail方法来加载邮件模板,并填充动态数据。例如,我们可以修改sendEmail方法如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javam