一、开启 POP3/SMTP服务 获得的授权码
进入qq邮箱
没有开启服务要选择开启,开启了的话需要点击管理服务,
进入管理服务的安全设置点击生成授权码
微信扫码短信验证
然后需要你保存好这个授权码后面要用
二、前端登录界面拦截器修改
修改提示
修改邮箱匹配正则表达式
三、修改pom.xml和application.yml
- pom.xml
<!-- 邮件服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- Thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- application.yml
# 邮箱配置
mail:
host: smtp.qq.com
username: [1312831081@qq.com] # 开启IMAP/SMTP服务对应qq邮箱的账号
password: [qewrgszdg] # 前面开启 IMAP/SMTP服务获得的授权码
default-encoding: UTF-8
二、后端接口修改
- controller
@PostMapping("/sendMsg")
public R<String> sendMsg(@RequestBody User user, HttpSession session) {
// 获取邮箱账号
String phone = user.getPhone();
String subject = "瑞吉外卖登录验证码";
if (StringUtils.isNotEmpty(phone)) {
String code = ValidateCodeUtils.generateValidateCode(4).toString();
String context = "登录验证码为: " + code + ",五分钟内有效!";
log.info("code={}", code);
// 发送邮箱验证码
userService.sendMsg(phone, subject, context);
// 验证码缓存到Redis中,有效时间为 5分钟
redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
return R.success("验证码发送成功!");
}
return R.error("验证码发送失败,请重新输入!");
}
- Service
void sendMsg(String to,String subject,String context);
- ServiceImpl
@Value("${spring.mail.username}")
private String from; // 邮件发送账号对应yml文件,即开启IMAP/SMTP服务对应qq邮箱的账号
@Autowired
private JavaMailSender mailSender;
@Override
public void sendMsg(String to, String subject, String context) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(from);
mailMessage.setTo(to);
mailMessage.setSubject(subject);
mailMessage.setText(context);
mailSender.send(mailMessage);
}