springboot--使用QQ邮箱
1️⃣ 前置条件
QQ邮箱准备
需要有一个 QQ 邮箱账号。
登录邮箱,开启 SMTP 服务:
进入邮箱 → 设置 → 账户 → 开启 “SMTP 服务”。
获取授权码(授权码即 SMTP 密码,用于第三方客户端登录,不是邮箱登录密码)。
SMTP 服务器信息:
参数 值 SMTP服务器 smtp.qq.com 端口 465(SSL) / 587(TLS) 是否需要身份验证 是 依赖
Spring Boot 需要引入邮件依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-主要是这个--><!--邮箱的jar--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency></dependencies>
2️⃣ 配置邮箱信息
在
application.yml
或application.properties
中配置:application.yml 示例
spring:mail:# 下面这个是QQ邮箱host , 企业邮箱 : smtp.exmail.qq.comhost: smtp.qq.com#port 这个是固定的port: 465# 你的QQ邮箱username: 你的qq邮箱地址# 进入邮箱配置后得到的授权码password: 你获取到的授权码test-connection: trueproperties:mail:smtp:ssl:enable: true
说明
配置项 作用spring.mail.host 邮件服务器地址spring.mail.port SMTP 端口(SSL 465 / TLS 587)spring.mail.username 发件人邮箱账号spring.mail.password SMTP 授权码spring.mail.test-connection 启动时测试 SMTP 服务器连接spring.mail.properties.mail.smtp.ssl.enable 开启 SSL 安全连接
3️⃣ 发送邮件示例
3.1 使用
JavaMailSender
发送简单文本邮件@RequestMapping("/mail") @RestController public class MailDemoController {@Autowiredprivate JavaMailSender javaMailSender;//发送普通文本@GetMapping("/txt")public String senderMail() {SimpleMailMessage message = new SimpleMailMessage();// 发件人 你的邮箱message.setFrom("xxx@qq.com");// 接收人 接收者邮箱message.setTo(new String[]{"xxx@qq.com"});//邮件标题message.setSubject("邮箱标题");//邮件内容message.setText("11");javaMailSender.send(message);return "success";}}
3.2 发送 HTML 邮件
@RequestMapping("/mail") @RestController public class MailDemoController {@Autowiredprivate JavaMailSender javaMailSender;//发送html@GetMapping("/html")public void sendHtmlMail() throws MessagingException {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");//注意这里用的MimeMessageHelper helper并非MimeMessage messagehelper.setFrom("你的邮箱@qq.com");//你要发送人的helper.setTo(new String[]{"xxx@qq.com"});//邮件标题helper.setSubject("邮箱标题");//发送的内容String htmlContent = "<h1 style='color:blue'>欢迎使用QQ邮箱发送邮件</h1>"+ "<p>这是一封 <b>HTML</b> 格式的邮件</p>"+ "<a href='https://mail.qq.com'>点击跳转QQ邮箱</a>";//htmlContent是上面定义的发送内容helper.setText(htmlContent, true); // true 表示HTMLjavaMailSender.send(message);} }
3.3 发送带附件邮件
@RequestMapping("/mail") @RestController public class MailDemoController {@Autowiredprivate JavaMailSender javaMailSender;//发送附件(也就是文件)@GetMapping("/file")public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");//注意这里用的MimeMessageHelper helper并非MimeMessage messagehelper.setFrom("你的邮箱@qq.com");//你要发送人的helper.setTo(new String[]{"xxx@qq.com"});//邮件标题helper.setSubject("邮箱标题");helper.setText(content, true);//Java 里创建一个 File 对象File file = new File("文件路径");//添加附件helper.addAttachment(file.getName(), file);javaMailSender.send(message);} }
4️⃣ 常见问题与注意事项
授权码必须使用 SMTP 授权码
QQ 邮箱登录密码无法直接用于 SMTP。
端口问题
465 对应 SSL
587 对应 TLS
必须与配置一致,否则会报连接错误。
发送邮箱必须与
username
一致
否则可能报 “550 Unauthorized” 错误。
防火墙与网络
某些服务器会阻止 465/587 端口,需要确认防火墙开放。
发送大量邮件注意
QQ 邮箱对发送频率有一定限制(防止垃圾邮件)。