基于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());
}
}
}