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());
        }
    }
}
相关推荐
Mk598784 分钟前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端
雨中飘荡的记忆5 分钟前
Claude Code 入门必会:@、!、Slash Commands,一篇讲清楚
人工智能·后端
苜蓿muxu13 分钟前
Java 字符串拼接:+、StringBuilder、StringBuffer的区别
java
摇滚侠20 分钟前
《Java并发编程之美》第 4 章 Java 并发包中原子操作类原理剖析 阅读笔记 7
java·笔记·python
用户83562907805121 分钟前
如何使用 Python 在 Word 文档中创建和格式化列表
后端·python
开心就好202526 分钟前
uni-app 本地打包 iOS,在 Windows 上使用 KXBuild 产出 ipa 并上架的完整流程
后端·ios
百慕大三角38 分钟前
从 CLAUDECODE 到 AI_AGENT:前端与 CLI 工具如何感知 AI 编码代理?
人工智能·后端·全栈
旋律4141 小时前
同义方法区别(增加类与删除类)
java·后端
调试人生的显微镜1 小时前
跨平台抓包工具怎么选?TraceEagle抓包鹰 的四种跨平台能力
后端·ios