目录
在现代应用程序开发中,发送邮件是一个常见的需求。Spring Boot 提供了强大的支持,使得集成邮件服务变得非常简单。本文将介绍如何使用 Spring Boot 集成 QQ 邮箱,并通过 QQ 邮箱发送邮件,此文也是便于自己以后进行参考。
1、配置邮件服务
在 application.properties
文件中,添加以下配置:
# ===========邮箱相关=========
spring.mail.host=smtp.qq.com
spring.mail.username= 123456@qq.com
spring.mail.password= 你qq邮箱申请的授权码
spring.mail.port=587
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
或在 application.yml
文件中,添加以下配置:
spring:
# ===========邮箱相关=========
mail:
host: smtp.qq.com
username: 123456@qq.com
password: xxxxx
port: 587
default-encoding: UTF-8
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
debug: true
参数解释:
spring.mail.host:配置 SMTP 服务器地址。
spring.mail.username:配置发送者邮箱。
spring.mail.password:配置密码,注意这里填写的是qq邮箱申请的授权码,而不是真正的邮箱密码。
spring.mail.port:配置端口号,可以是 465 或 587。
spring.mail.default-encoding:配置默认的邮件编码为 UTF-8。
spring.mail.properties.mail.smtp.socketFactoryClass:配置 SSL 加密工厂。
spring.mail.properties.mail.debug:表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误。
2、获取QQ邮箱授权码
通过以下步骤获取授权码:
2.1进入qq邮箱首页,点击设置-账号。
2.2找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 点击管理服务,按照操作进行发送短信登验证。
2.3查看是否开启,点击生成授权码,发送短信进行后续操作。
2.4验证成功,生成授权码
上述就完成了最重要的步骤获取到了授权码,下面就通过代码进行测试了。
3、引入依赖
<!--qq邮箱-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
4、创建控制器
创建一个名为 EmailController
的控制器,用于处理邮件发送请求:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Random;
@RestController
@RequestMapping("email")
public class EmailController {
@Autowired
private JavaMailSender javaMailSender;
//读取yml文件中username的值并赋值给form
@Value("${spring.mail.username}")
private String from;
@RequestMapping("sendEmail")
public String sendSimpleMail(@RequestParam(value = "emailReceiver") String emailReceiver) {
// 构建一个邮件对象
SimpleMailMessage message = new SimpleMailMessage();
// 设置邮件发送者
message.setFrom(from);
// 设置邮件接收者
message.setTo(emailReceiver);
// 设置邮件的主题
message.setSubject("登录验证码");
// 设置邮件的正文
Random random = new Random();
StringBuilder code = new StringBuilder();
for (int i = 0; i < 6; i++) {
int r = random.nextInt(10);
code.append(r);
}
String text = "您的验证码为:" + code + ",请勿泄露给他人。";
message.setText(text);
// 发送邮件
try {
javaMailSender.send(message);
return "发送成功";
} catch (MailException e) {
e.printStackTrace();
}
return "发送失败";
}
}
5、接口测试
127.0.0.1:9899/email/sendEmail?emailReceiver=123456789@qq.com
验证成功。