SpringBoot Java邮件发送工具类

1、引入依赖 pom.xml

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、增加配置 application.yml

xml 复制代码
spring:
	mail:
        # 发送邮件的服务器,笔者这里使用的 QQ 邮件
        host: smtp.qq.com
        username: ***@qq.com
        password: ***
        properties.mail.smtp.auth: true
        properties.mail.smtp.starttls.enable: true
        default-encoding: utf-8

3、发送邮件工具类 SendMailUtils.java

java 复制代码
package com.company.mail.utils;

import com.company.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.internet.MimeMessage;

/**
 * 发送邮件工具类
 *
 * @author ZhangJi
 */
@Slf4j
public class SendMailUtils {

    private SendMailUtils() {}

    private static final MailProperties MAIL_PROPERTIES;
    private static final JavaMailSender MAIL_SENDER;

    static {
        MAIL_PROPERTIES = SpringUtils.getBean(MailProperties.class);
        MAIL_SENDER = SpringUtils.getBean(JavaMailSender.class);
    }

    /**
     * 发送简单文本的邮件
     * @param target 目标邮箱
     * @param subject 标题
     * @param content 内容
     * @return 发送结果
     */
    public static boolean sendSimpleMail(String target, String subject, String content) {

        return sendHtmlMail(target, subject, content);
    }

    /**
     * 发送 html 的邮件
     * @param target 目标邮箱
     * @param subject 标题
     * @param html 内容
     * @return 发送结果
     */
    public static boolean sendHtmlMail(String target, String subject, String html) {

        return sendAffixMail(target, subject, html, null);
    }

    /**
     * 发送发票邮件
     * @param target 目标邮箱
     * @param subject 标题
     * @param filePath 发票附件
     * @return 发送结果
     */
    public static boolean sendInvoiceMail(String target, String subject, String filePath) {

        return sendAffixMail(target, subject, "<p>尊敬的用户您好:</p><p>您的发票已开出,请查收。</p>", new String[] {filePath});
    }

    /**
     * 发送带有附件的邮件
     * @param target 目标邮箱
     * @param subject 标题
     * @param content 内容
     * @param filePaths 附件列表
     * @return 结果
     */
    public static boolean sendAffixMail(String target, String subject, String content, String[] filePaths) {
        log.info("## Ready to send mail ...");
        MimeMessage mimeMessage = MAIL_SENDER.createMimeMessage();

        MimeMessageHelper mimeMessageHelper;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            // 邮件发送来源
            mimeMessageHelper.setFrom(MAIL_PROPERTIES.getUsername());
            // 邮件发送目标
            mimeMessageHelper.setTo(target);
            // 设置标题
            mimeMessageHelper.setSubject(subject);
            // 设置内容
            mimeMessageHelper.setText(content);

            // 添加附件
            if(null != filePaths && filePaths.length > 0) {
                for (int i = 0; i < filePaths.length; i++) {
                    FileSystemResource file = new FileSystemResource(filePaths[i]);
                    String fileName = "附件" + (i + 1) + "_" + file.getFile().getName();
                    mimeMessageHelper.addAttachment(fileName, file);
                }
            }

            MAIL_SENDER.send(mimeMessage);
            log.info("## Send the mail with enclosure success ...");
        } catch (Exception e) {
            log.error("Send html mail error: ", e);
            return false;
        }
        return true;
    }

    public static MailProperties getMailProperties() {
        return MAIL_PROPERTIES;
    }

    public static JavaMailSender getMailSender() {
        return MAIL_SENDER;
    }
}

4、测试类 MailTest.java

java 复制代码
package com.company.test;

import com.company.PlatformApplication;
import com.company.common.config.PlatformConfig;
import com.company.common.constant.Constants;
import com.company.mail.utils.SendMailUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = PlatformApplication.class)
public class MailTest {

    @Test
    public void sendInvoiceMail() {
        String filePath = "/profile/upload/2026/04/10/20260410092201A001.png";
        filePath = filePath.contains("http")?filePath: filePath.replace(Constants.RESOURCE_PREFIX, PlatformConfig.getProfile());
        System.out.println(SendMailUtils.sendInvoiceMail("1661623520@qq.com", "发票开具通知", filePath));
    }
}

使用说明

对应的工具类,如:字符串等,换成自己的即可。

个人博客:紫琪软件工作室

邮箱留言:zhangji_59@qq.com

相关推荐
郝学胜-神的一滴1 小时前
干货版《算法导论》04:渐近复杂度与序列接口实战
java·开发语言·数据结构·c++·python·算法
2301_811130541 小时前
【保姆级教程】Android Studio完整安装步骤(2026最新版,新手零踩坑)
android·java
杨运交1 小时前
[017][web模块]基于计数器的接口幂等性与访问限流设计实战
spring boot·后端
_Evan_Yao1 小时前
缓存与数据库的“双写悖论”:一致性的常见陷阱与破局之道
java·后端·缓存
超梦dasgg1 小时前
Sentinel生产环境实战全解
java·微服务·sentinel
青云计划1 小时前
MySQL技术文档
java·mysql
fengxin_rou1 小时前
Feed 三级缓存架构详解:分层设计、缓存一致性与高性能实战
spring·缓存·架构
qq_2518364571 小时前
基于java 汽车检修管理系统设计与实现 论文
java·开发语言·汽车
量子炒饭大师1 小时前
【Linux系统编程】Cyberpunk在霓虹丛林中构建堡垒 ——【基础开发工具(1)】一文带你初步了解 软件包管理器 并 快速上手 yum和apt 工具
java·linux·运维·apt·yum·软件包管理器