1、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>
2、yml导入
spring:
# 邮箱配置
mail:
host: smtp.qq.com # 发送邮件的服务器地址
username: 75685172@qq.com # 开启 IMAP/SMTP服务 的qq邮箱的账号
password: xmwmngreijylbgch # 开启 IMAP/SMTP服务 获得的授权码,而不是qq邮箱的登录密码
default-encoding: UTF-8
3、配置工具类
public class ValidateCodeUtils {
public static Integer generateValidateCode(int length){
Integer code =null;
if(length == 4){
code = new Random().nextInt(9999);
if(code < 1000){
code = code + 1000;
}
}else if(length == 6){
code = new Random().nextInt(999999);
if(code < 100000){
code = code + 100000;
}
}else{
throw new RuntimeException("只能生成4位或6位数字验证码");
}
return code;
}
public static String generateValidateCode4String(int length){
Random rdm = new Random();
String hash1 = Integer.toHexString(rdm.nextInt());
String capstr = hash1.substring(0, length);
return capstr;
}
}
4、service配置
void sendMsg(String to,String subject,String context);
5、serviceImpl配置
@Value("${spring.mail.username}")
private String from;
@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);
}
6、controller配置
String mail = user.getMail();
String subject = "***登录验证码";
if (StringUtils.isNotEmpty(mail)) {
String code = ValidateCodeUtils.generateValidateCode(4).toString();
String context = "欢迎使用 ***,登录验证码为: " + code + ",五分钟内有效,请妥善保管!";
log.info("code={}", code);
userService.sendMsg(mail, subject, context);
session.setAttribute(mail, code);
redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
return R.success("验证码发送成功,请及时查看!");
}
return R.error("验证码发送失败,请重新输入!");