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());
        }
    }
}
相关推荐
霍格沃兹测试学院-小舟畅学20 小时前
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
java·前端·人工智能
我命由我1234520 小时前
Retrofit - URL 格式错误问题、支持 HTTP 与 HTTPS
java·http·https·java-ee·android studio·android-studio·retrofit
灰灰老师20 小时前
Docker部署Tomcat9
java·linux·docker·tomcat
西安邮电大学20 小时前
Kafka如何避免重复消费
java·后端·其他·面试·kafka
ppandss120 小时前
JavaWeb从0到1-DAY11-MyBatis入门
java·tomcat·mybatis
basketball61620 小时前
Golang:基础语法总结
开发语言·后端·golang
闪电悠米20 小时前
黑马点评-优惠券秒杀-03_basic_seckill_and_oversell
java·数据库·spring boot·spring·缓存·oracle·面试
兰令水20 小时前
leecodecode【双指针题2】【2026.5.26打卡-java版本】
java·开发语言·算法
ch.ju20 小时前
Java程序设计(第3版)第四章——引用
java·开发语言