1. 为什么需要SpringBoot邮件发送功能?
在现代Web应用中,邮件发送几乎是每个系统都需要的标配功能。想象一下这样的场景:用户注册时需要发送验证邮件、订单生成后需要发送确认邮件、系统异常时需要发送告警邮件...这些场景都需要可靠的邮件发送能力。
传统JavaMail API的使用方式相当繁琐,需要手动创建Session、设置Properties、处理MIME消息等。而SpringBoot通过spring-boot-starter-mail这个starter,将邮件发送的复杂度降到了最低。我见过不少团队在项目初期选择直接调用第三方邮件服务商的HTTP API,但后期遇到性能瓶颈后又不得不回迁到SMTP协议方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 必备依赖引入
在pom.xml中添加邮件starter依赖:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
这个starter会自动引入:
- javax.mail 1.6.6 (JavaMail API实现)
- Spring框架的邮件支持模块
2.2 SMTP配置详解
在application.properties中配置SMTP参数:
properties复制# 网易邮箱示例配置
spring.mail.host=smtp.163.com
spring.mail.port=465
spring.mail.username=yourname@163.com
spring.mail.password=yourpassword
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
关键配置说明:
ssl.enable=true表示使用SSL加密连接- 三个timeout参数建议都配置,避免网络问题导致线程阻塞
- 不同邮箱服务商的配置差异:
- 腾讯企业邮箱端口通常是465或587
- Gmail需要额外配置
spring.mail.properties.mail.smtp.starttls.enable=true
警告:千万不要把密码明文写在配置文件中!实际项目中应该使用Jasypt等工具加密,或者从配置中心读取。
3. 四种邮件发送实战
3.1 简单文本邮件
java复制@Autowired
private JavaMailSender mailSender;
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("noreply@y
