## 前言

在现代应用开发中,邮件发送是一项非常常见的功能,它可以用于用户注册、密码找回、信息通知等多个场景。本文将详细介绍如何使用 Hutool 库结合 Spring Boot 实现邮件发送功能。

一、简介

1.1 Spring Boot

Spring Boot 是一个快速开发的框架,它简化了 Spring 应用的开发过程,通过自动配置和约定大于配置的原则,让开发者能够更加专注于业务逻辑的实现,而不是繁琐的配置工作。

1.2 Hutool

Hutool 是一个 Java 工具包,它封装了众多实用的工具类,包括文件、日期、加密、网络等,其邮件发送模块使邮件发送变得更加简单和便捷。

二、项目准备

2.1 创建 Spring Boot 项目

首先,通过 Spring Initializr(https://start.spring.io/)创建一个新的 Spring Boot 项目。在依赖选择中,确保包含 Spring Web 模块,以便我们后续可能的 Web 服务开发。

2.2 添加 Hutool 依赖

在 pom.xml 文件中添加 Hutool 的依赖:

收起

xml

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version> <!-- 使用最新版本 -->
</dependency>

2.3 添加邮件发送依赖

为了实现邮件发送,我们还需要添加 JavaMail 的依赖:

收起

xml

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

三、配置邮件信息

3.1 配置文件

在 src/main/resources/application.properties 中添加邮件服务器的配置信息:

收起

properties

spring.mail.host=smtp.example.com
spring.mail.port=465
spring.mail.username=your_username
spring.mail.password=your_password
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable=true

请将 smtp.example.com 替换为实际的 SMTP 服务器地址,your_username 和 your_password 替换为自己的邮箱用户名和密码。

四、实现邮件发送代码

4.1 创建邮件发送服务类

在 com.example.demo.service 包下创建 EmailService 类:

收起

java

import cn.hutool.extra.mail.MailUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

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

    public void sendEmail(String toEmail, String subject, String content) {
        MailUtil.send(fromEmail, toEmail, subject, content, false);
    }
}

在上述代码中:

  • @Service 注解将 EmailService 标记为 Spring 服务,方便后续自动注入。
  • @Value("${spring.mail.username}") 从配置文件中读取发件人的邮箱地址。
  • MailUtil.send 是 Hutool 提供的发送邮件的工具方法,它接收发件人邮箱、收件人邮箱、邮件主题、邮件内容和是否为 HTML 邮件的参数。

4.2 测试邮件发送

在 com.example.demo.controller 包下创建 EmailController 类:

收起

java

import com.example.demo.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/email")
public class EmailController {

    @Autowired
    private EmailService emailService;

    @GetMapping("/send")
    public String sendEmail() {
        String toEmail = "recipient@example.com";
        String subject = "测试邮件";
        String content = "这是一封来自 Spring Boot 和 Hutool 的测试邮件。";
        emailService.sendEmail(toEmail, subject, content);
        return "邮件发送成功";
    }
}

在上述代码中:

  • @RestController 表明这是一个 RESTful 控制器,@RequestMapping("/email") 为该控制器定义了基本的请求映射路径。
  • @Autowired 自动注入 EmailService 服务。
  • @GetMapping("/send") 表示当接收到 /email/send 的 GET 请求时,调用 sendEmail 方法发送邮件。

五、高级邮件功能

5.1 发送 HTML 邮件

如果想要发送 HTML 邮件,只需将 MailUtil.send 方法的最后一个参数设为 true,并修改邮件内容为 HTML 格式:

收起

java

public void sendHtmlEmail(String toEmail, String subject, String htmlContent) {
    MailUtil.send(fromEmail, toEmail, subject, htmlContent, true);
}

例如,在 EmailController 中调用发送 HTML 邮件的方法:

收起

java

@GetMapping("/sendHtml")
public String sendHtmlEmail() {
    String toEmail = "recipient@example.com";
    String subject = "测试 HTML 邮件";
    String htmlContent = "<h1>这是一封 HTML 邮件</h1><p>来自 Spring Boot 和 Hutool 的测试邮件。</p>";
    emailService.sendHtmlEmail(toEmail, subject, htmlContent);
    return "HTML 邮件发送成功";
}

5.2 发送带附件的邮件

Hutool 也支持发送带附件的邮件,以下是一个示例:

收起

java

import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import java.io.File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

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

    public void sendEmailWithAttachment(String toEmail, String subject, String content, File attachment) {
        MailAccount account = new MailAccount();
        account.setHost("smtp.example.com");
        account.setPort(465);
        account.setAuth(true);
        account.setFrom(fromEmail);
        account.setUser(fromEmail);
        account.setPass("your_password");
        account.setSslEnable(true);

        MailUtil.send(account, toEmail, subject, content, false, attachment);
    }
}

在 EmailController 中调用发送带附件的邮件方法:

收起

java

@GetMapping("/sendWithAttachment")
public String sendEmailWithAttachment() {
    String toEmail = "recipient@example.com";
    String subject = "测试带附件的邮件";
    String content = "这是一封带附件的邮件。";
    File attachment = new File("path/to/attachment.pdf");
    emailService.sendEmailWithAttachment(toEmail, subject, content, attachment);
    return "带附件的邮件发送成功";
}

六、总结

通过 Spring Boot 的自动配置和 Hutool 的便捷工具类,我们可以轻松实现邮件发送功能。无论是简单的文本邮件,还是复杂的 HTML 邮件和带附件的邮件,都可以通过简洁的代码完成。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐