Spring Boot 集成邮件服务实现发送邮件功能

基于Spring Boot框架,通过官方提供的spring-boot-starter-mail starter 组件,快速实现邮件发送功能,支持纯文本邮件、HTML 格式邮件、带抄送 / 附件邮件等主流业务场景,满足系统通知、告警、营销、业务单据推送等邮件发送需求。

具备配置轻量化、代码简洁化、扩展性强等特点,无需手动处理复杂的 SMTP 协议交互,Spring Boot 自动完成邮件发送器的初始化与配置绑定,降低开发成本与维护难度。

1. 引入依赖

xml 复制代码
<!--     mail包含以下依赖    -->        
	   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.springframework</groupId>-->
<!--            <artifactId>spring-context-support</artifactId>-->
<!--            <version>5.3.31</version>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>com.sun.xml.ws</groupId>-->
<!--            <artifactId>jaxws-rt</artifactId>-->
<!--            <version>2.3.5</version>-->
<!--        </dependency>-->

2. 配置文件参数

yaml 复制代码
spring:
  mail:
    send-enabled: true
    protocol: smtp
    default-encoding: UTF-8
    host: outlook.demo.com
    port: 587
    user-name: cn-support@demo.com
    password: 123456

3. 邮件传输 DTO

java 复制代码
@Data
public class EmailSendDTO {

    // 邮件主题
    private String subject;

    // 邮件内容
    private String content;

    // 发送人
    private String sendMail;

    // 抄送人
    private String carbonCopy;
}

4. 邮件接口

java 复制代码
@RestController
@Slf4j
public class EmailController {

    // 注入配置的路径
    @Value("${img-path}")
    private org.springframework.core.io.Resource filePath;


    @Resource
    private JavaMailSender mailSender;

    // 发送文本邮件
    @PostMapping("/sendSimpleEmail")
    public void sendSimpleEmail(@RequestBody EmailSendDTO emailSendDTO) {
        try {
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            simpleMailMessage.setFrom(Objects.requireNonNull(((JavaMailSenderImpl) mailSender).getUsername()));
            simpleMailMessage.setTo(new String[]{emailSendDTO.getSendMail()});
            simpleMailMessage.setSubject(emailSendDTO.getSubject());
            simpleMailMessage.setText(emailSendDTO.getContent());
            // 抄送人
            if (StringUtils.hasText(emailSendDTO.getCarbonCopy())) {
                String[] carbonCopy = {emailSendDTO.getCarbonCopy()};
                simpleMailMessage.setCc(carbonCopy);
            }
            log.info("----------------------Before Send SimpleEmail----------------------");
            mailSender.send(simpleMailMessage);
            log.info("----------------------Send SimpleEmail success----------------------");
        } catch (Exception e) {
            log.error("----------------------Send SimpleEmail failed: {}----------------------", e.getMessage());
        }
    }

    // 发送html邮件
    @PostMapping("/sendEmail")
    public void sendEmail(@RequestBody EmailSendDTO emailSendDTO) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(Objects.requireNonNull(((JavaMailSenderImpl) mailSender).getUsername()));
            helper.setTo(new String[]{emailSendDTO.getSendMail()});
            helper.setSubject(emailSendDTO.getSubject());
            helper.setText(emailSendDTO.getContent(), true);
            // 抄送人
            if (StringUtils.hasText(emailSendDTO.getCarbonCopy())) {
                String[] carbonCopy = {emailSendDTO.getCarbonCopy()};
                helper.setCc(carbonCopy);
            }
            // 发送带附件的邮件
//            FileSystemResource file = new FileSystemResource(filePath.getFile());
//            String absolutePath = filePath.getFile().getAbsolutePath();
//            String fileName = absolutePath.substring(absolutePath.lastIndexOf(File.separator));
//            helper.addAttachment(fileName, file);
            log.info("----------------------Before Send mail----------------------");
            mailSender.send(mimeMessage);
            log.info("----------------------Send mail success----------------------");
        } catch (Exception e) {
            log.error("----------------------Send mail failed: {}----------------------", e.getMessage());
        }
    }
}
相关推荐
浮尘笔记2 小时前
Java Snowy 框架生产环境安全部署全流程(服务器篇)
java·运维·服务器·开发语言·后端
宸津-代码粉碎机2 小时前
Spring Boot 4.0虚拟线程实战续更预告:高阶技巧、监控排查与分布式场景落地指南
java·大数据·spring boot·分布式·后端·python
Rsun045512 小时前
6、Java 适配器模式从入门到实战
java·开发语言·适配器模式
MaCa .BaKa2 小时前
52-考研备考服务平台系统-考研系统
java·spring boot·mysql·考研·tomcat·maven·mybatis
JZC_xiaozhong2 小时前
2026技术深潜:解构Spring Boot与Spring Framework架构,透视KPaaS集成平台底层逻辑
大数据·spring boot·spring·架构·数据集成与应用集成·异构系统集成·应用对接
_深海凉_2 小时前
LeetCode热题100-最长公共子序列
java·开发语言·前端
8Qi82 小时前
Elasticsearch实战篇:索引库、文档与JavaRestClient操作指南
java·大数据·elasticsearch·搜索引擎·微服务·架构·springcloud
落羽的落羽2 小时前
【Linux系统】深入线程:多线程的互斥与同步原理,封装实现两种生产者消费者模型
java·linux·运维·服务器·c++·人工智能·python
计算机学姐2 小时前
基于SpringBoot的社区服务平台
java·spring boot·后端·spring·信息可视化·tomcat·mybatis