Spring Boot集成JavaMailSender实现邮件发送
发表于更新于
字数总计:952阅读时长:3分钟 上海
后端后端Spring Boot集成JavaMailSender实现邮件发送
xukunSpring Boot 集成 JavaMailSender实现邮件发送
背景
邮件发送为项目中的常用功能之一,例如注册成功后需要发送激活邮件,每日报表统计,日志告警监控,数据迁移通知等功能都需要自动发送邮件通知管理员或运维人员处理
具体实现
本文将从Spring Boot集成的JavaMailSender来实现邮件发送功能
1、关于JavaMailSender
JavaMailSender是Spring Framework中的一个接口,用于发送电子邮件
它是Spring对JavaMail API的封装,提供了更简单和更方便的方式来发送邮件
JavaMailSender接口定义了一组发送邮件的方法,包括发送简单文本邮件、发送带附件的邮件、发送HTML格式的邮件等
它隐藏了底层JavaMail API的复杂性,使得在Spring应用中发送邮件变得更加容易
JavaMailSender是Spring Framework中用于发送邮件的接口,它简化了邮件发送的过程,提供了更高级的抽象和便利性
2、引入pom依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
|
3、yml邮件配置
下面以腾讯企业邮箱对应的配置为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| mail: host: smtp.exmail.qq.com port: 465 username: xx@xx.com password: pwd protocol: smtp default-encoding: UTF-8 from: xx@xx.com to: xx@xx.com cc: 2454084262@qq.com properties: mail: smtp: auth: true ssl: enable: true socketFactory: class: com.sun.mail.util.MailSSLSocketFactory fallback: false
|
首先配置邮箱的host,根据邮件提供商的域名进行更改
port:查看对应邮件提供商发送服务器的端口

注:必须开启IMAP/SMTP服务
腾讯企业邮箱参考:帮助中心
password:客户端的专用密码(不是登陆密码)

from:发件人邮件
properties:如果邮箱采用SSL方式发送,则必须配置此项
4、配置实现类接口
根据需要配置邮件发送的内容
1 2 3 4 5 6 7 8 9
| public interface MailService {
void sendEmail(String subject, String content); }
|
5、配置邮件实现类
实现接口中的sendEmail方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| @Service public class MailServiceImpl implements MailService {
private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
@Autowired private JavaMailSender mailSender;
@Value("${spring.mail.from}") private String mailFrom;
@Value("${spring.mail.to}") private String mailTo;
@Value("${spring.mail.cc}") private String mailCc;
@Override public void sendEmail(String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(mailFrom); if (mailTo != null && !mailTo.trim().isEmpty()) { String[] toArray = mailTo.split("\\s*,\\s*"); message.setTo(toArray); } if (mailCc != null && !mailCc.trim().isEmpty()) { String ccProcessed = mailCc.replace("\"", "").trim(); String[] ccArray = ccProcessed.split("\\s*,\\s*"); message.setCc(ccArray); } message.setSubject(subject); message.setText(content); try { mailSender.send(message); logger.info("邮件发送成功,主题:{}", subject); } catch (Exception e) { logger.error("邮件发送失败", e); throw e; } } }
|
注:由于方法中使用了@Value注解从配置文件中读取发送人、抄送人信息,当有多个发送人/抄送人时,无法正确解析对应的字符串,因此需要先对传入的字符串进行过滤操作,去除空格和引号
配置文件中多个邮件的格式为:xx@xx.com,xx@xx.com,xx@xx.com
6、代码应用
在开发完成实现类之后,在需要发送邮件的方法中调用
1 2 3
| private final MailService mailService;
mailService.sendEmail("增量数据迁移完成", result);
|

最终效果:
