SpringBoot邮箱
November 26, 2023
2041
Maven依赖
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>项目配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15spring:
# 邮箱验证配置信息|必填
mail:
host: smtp.qq.com # 如果你需要使用非qq邮箱,请自行配置host
username: # 请自行配置邮箱地址
password: # 请自行配置邮箱smtp授权码,参考邮箱配置
port: 587
default-encoding: UTF-8
timeout: 10 # 验证码有效时间 单位:分钟
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
# 开启debug以后,邮件发送过程的日志会在控制台上打印出来
debug: true邮箱配置
该邮箱作为发送验证码的用途,在这里我建议使用QQ邮箱,因为QQ邮箱的SMTP服务是免费的,而且不需要进行额外的配置。SMTP服务的配置信息可以在QQ邮箱的设置中找到,登陆你的QQ邮箱,点击左上角的设置按钮,选择设置
,选择账户
,找到开启POP3/SMTP服务
,经过一系列的确认后,你将获得一个授权码
,这个授权码就是你的邮箱密码password
,你可以在application.yml
中的邮箱配置信息中配置它。发送信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/**
* 邮箱发送器
*/
@Resource
private JavaMailSender javaMailSender;
/**
* 发送验证码的邮箱地址
*/
@Value("${spring.mail.username}")
private String FROM;
/**
* 失效时间
*/
@Value("${spring.mail.timeout}")
private int TIME_OUT_MINUTES;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 发送邮件
// 构建一个邮件对象
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
// 设置邮件发送者
simpleMailMessage.setFrom(FROM);
// 设置邮件接收者
simpleMailMessage.setTo(email);
// 设置邮件主题
simpleMailMessage.setSubject("[xx系统]登陆验证码");
// 设置邮件内容
simpleMailMessage.setText("您的验证码为:" + code + ",请在" + TIME_OUT_MINUTES + "分钟内使用!\n【该邮件为系统自动发送,请勿回复】");
// 将验证码存入redis,设置失效时间TIME_OUT_MINUTES分钟
redisTemplate.opsForValue().set(email, code, TIME_OUT_MINUTES, java.util.concurrent.TimeUnit.MINUTES);
// 发送邮件
try {
javaMailSender.send(simpleMailMessage);
} catch (MailException e) {
e.printStackTrace();
throw new CustomException("致命错误!");
}登录
- 用户输入邮箱号,点击获取验证码。
- 后端controller层获取邮箱号。
- 后端检查Redis是否存在该邮箱的验证码,如果存在则提示用户“请勿重复获取验证码”
- 生成6位随机数(密码),设置过期时间,存入Redis。
- 调用service层方法去发送邮件携带验证码给该邮箱。
- 用户收到邮件,输入验证码。
- 后端获取验证码,与Redis中的密码进行对比。
- 对比成功进入系统主界面,失败提示用户“验证码错误,请重新输入验证码”。
- 本文作者:chen
- 本文链接:http://suft.top/2023/11/26/SpringBoot%E9%82%AE%E7%AE%B1/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!