SpringBoot实现邮箱验证码
在B站找到一个springboot项目进行学习时,里面用的是阿里云短信进行发送邮件,但是个人使用阿里云短信比较麻烦,于是想到可不可以使用邮箱来完成发送验证码的操作。事实证明是可行的
第一步
引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
第二步
在application.yml文件中写入相关的配置,这边我使用的qq邮箱
mail:
host: smtp.qq.com
username: qq邮箱地址
password: 授权码
default-encoding: utf-8
port: 587
其中授权码,需要在qq邮箱设置 – 账户中,开启POP3/SMTP服务,然后就能获得授权码
第三步
在Java代码中实现方法(因为是个人练习的代码,写的比较乱,大佬可以在基础上改改)
public R<String> sendMsg(@RequestBody User user, HttpSession session){
String phone = user.getPhone();
try {
log.info(user.toString());
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setFrom("设置发件qq邮箱");
messageHelper.setTo("接送方的邮箱地址");//这边填的是发送发的地址,需要写全地址
messageHelper.setFrom("发送方的地址,其实就是我的地址");//这边我填的是qq邮箱地址
messageHelper.setSubject("验证码");//邮件名字
String code = xxx;//使用方法生成一个验证码
messageHelper.setText("尊敬的用户,您好:\n本次请求的邮件验证码为:" + code);
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
return R.success("发送成功");
}
结果
后续
由于邮箱的响应时间比较长,在前后端交互的时候,可能会出现响应超时的问题,可以改下js中的timeout参数
function sendMsgApi(data) {
return $axios({
timeout: 6*60*1000, //响应时间
'url': '/user/sendMsg',
'method': 'post',
data
})
其余建议
- 其实不应该把处理写在controller层,并且其中接受方的地址应该以参数的形式传入,不能写死,例子中只是为了演示,大家可以后续对方法进行修改
- 在学习的时候,视频中是将code放入session中,之后再取出进行校验,其实可以放入redis中