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());
        }
    }
}
相关推荐
我命由我123453 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
mCell4 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯4 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0014 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
醉城夜风~7 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
数智化转型推荐官8 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互8 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
IT_陈寒8 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
ZhengEnCi9 小时前
S02-SpringBoot实体类新增字段对已有数据的影响及自动DDL同步机制详解
数据库·spring boot