Spring Boot 实现邮件发送功能
/ 收件人// 邮件主题// 邮件内容// 附件(可选)// Getters 和 Setters。
·
目录
在开发中,我们经常需要通过邮件发送通知,例如程序异常、注册验证等。本文将介绍如何使用 Spring Boot 配置 QQ 邮箱进行邮件发送,并通过全局异常处理实现自动邮件通知功能。
一、QQ 邮箱授权码设置
1. 开启 SMTP 服务
- 登录你的 QQ 邮箱,进入邮箱主页。
- 依次点击:
设置 -> 账户 -> 开启 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务
。 - 在 SMTP 服务 选项中,选择“开启”。
2. 获取授权码
- 在开启 SMTP 服务后,QQ 邮箱会提示你获取授权码。
- 点击“生成授权码”,按照提示通过手机验证码验证身份。
- QQ 邮箱会生成一串授权码(类似:
jqrbqmjopywigahi
),并将其显示给你。
⚠️ 注意:
该授权码用于登录邮件服务器,不是你 QQ 邮箱的登录密码。
请妥善保管授权码,避免泄露。
二、Spring Boot 配置 QQ 邮箱
1. 添加依赖
在 pom.xml
文件中引入 Spring Boot 邮件相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2. 配置邮件参数
在 application.yml
中设置 QQ 邮箱参数:
spring:
mail:
host: smtp.qq.com # QQ 邮箱 SMTP 服务器地址
port: 465 # QQ 邮箱 SMTP 服务端口(465 - SSL 加密端口)
username: *********** # 发件人邮箱地址
password: *********** # 授权码(非邮箱密码)
protocol: smtp
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true # 需要验证身份
starttls:
enable: true
required: true
ssl:
enable: true # 启用 SSL 加密
3. 验证配置
完成配置后,可以进行邮件发送测试,确保配置正确。
三、实现邮件发送服务
1. 定义邮件实体类
public class MyEmail {
private String to; // 收件人
private String subject; // 邮件主题
private String content; // 邮件内容
private String attachment; // 附件(可选)
// Getters 和 Setters
}
2. 创建邮件服务接口
public interface EmailService {
boolean checkEmail(MyEmail email); // 校验邮件参数
void sendEmail(MyEmail email); // 发送邮件
}
3. 实现邮件发送逻辑
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import java.util.Date;
@Service
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String sender;
@Override
public boolean checkEmail(MyEmail email) {
if (email.getTo() == null || email.getTo().isEmpty()) {
System.out.println("邮件收件人不能为空");
return false;
}
if (email.getSubject() == null || email.getSubject().isEmpty()) {
System.out.println("邮件主题不能为空");
return false;
}
if (email.getContent() == null || email.getContent().isEmpty()) {
System.out.println("邮件内容不能为空");
return false;
}
return true;
}
@Override
public void sendEmail(MyEmail email) {
try {
MimeMessageHelper helper = new MimeMessageHelper(mailSender.createMimeMessage(), true);
helper.setFrom(sender);
helper.setTo(email.getTo());
helper.setSubject(email.getSubject());
helper.setText(email.getContent(), true); // true 表示支持 HTML 格式
if (email.getAttachment() != null) {
helper.addAttachment("附件", new ByteArrayResource(email.getAttachment().getBytes()));
}
helper.setSentDate(new Date());
mailSender.send(helper.getMimeMessage());
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
e.printStackTrace();
System.out.println("邮件发送失败:" + e.getMessage());
}
}
}
四、全局异常处理发送邮件通知
1. 创建全局异常处理类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private EmailService emailService;
@ExceptionHandler(RuntimeException.class)
public String handleRuntimeException(RuntimeException e) {
e.printStackTrace();
// 邮件内容
MyEmail email = new MyEmail();
email.setTo("admin@example.com"); // 管理员邮箱
email.setSubject("程序异常通知");
email.setContent(
"<h1>程序异常,请尽快处理!</h1>" +
"<p style='color:red;'>异常信息:" + e.getMessage() + "</p>" +
"<p>请点击下方链接确认收到通知:</p>" +
"<a href='http://localhost:8080/confirm'>确认链接</a>"
);
// 发送邮件
emailService.sendEmail(email);
return "程序异常,已发送邮件通知管理员";
}
}
五、测试邮件发送
- 启动 Spring Boot 项目。
- 访问触发异常的接口,查看控制台输出。
- 检查管理员邮箱,确认是否收到异常通知邮件。
发送效果如下:
六、常见问题排查
1. 邮件发送失败
- 确保授权码正确,且 SMTP 服务已开启。
- 检查端口配置:QQ 邮箱使用 465(SSL) 或 587(STARTTLS)。
- 确保应用程序可以访问外网。
2. 发送 HTML 格式邮件
MimeMessageHelper
的setText
方法第二个参数传true
,表示支持 HTML 格式。
3. 邮件被拦截或标记为垃圾邮件
- 尽量避免邮件内容包含敏感词汇。
- 使用可信任的发件人邮箱和主题。
更多推荐
所有评论(0)