基于Spring Boot框架,通过官方提供的spring-boot-starter-mail starter 组件,快速实现邮件发送功能,支持纯文本邮件、HTML 格式邮件、带抄送 / 附件邮件等主流业务场景,满足系统通知、告警、营销、业务单据推送等邮件发送需求。
具备配置轻量化、代码简洁化、扩展性强等特点,无需手动处理复杂的 SMTP 协议交互,Spring Boot 自动完成邮件发送器的初始化与配置绑定,降低开发成本与维护难度。

1. 引入依赖

<!--     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. 配置文件参数

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

@Data
public class EmailSendDTO {

    // 邮件主题
    private String subject;

    // 邮件内容
    private String content;

    // 发送人
    private String sendMail;

    // 抄送人
    private String carbonCopy;
}

4. 邮件接口

@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());
        }
    }
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐