上一篇发送邮件的地址:https://blog.csdn.net/weixin_45962741/article/details/120156733?spm=1001.2014.3001.5501
此篇说一下发送验证码的邮件,首先,创建一个生成 6 位随机码的工具类:
package com.demo.qcby.util;
import java.security.SecureRandom;
import java.util.Random;
/**
* @Classname VerCodeGenerateUtil
* @Description 生成验证码工具类
* @Date 2021/9/7 14:23
* @Created by thx
*/
public class VerCodeGenerateUtil {
//验证码包含的字段,可自己设置
private static final String SYMBOLS = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
private static final Random RANDOM = new SecureRandom();
// 生成 6 位数的随机数字
public static String generateVerCode() {
// 如果是六位,就生成大小为 6 的数组
char[] numbers = new char[6];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
}
return new String(numbers);
}
}
工具类写好,可以在 controller 写测试了:
我这里是将 用户的实体类 添加了一个 verCode 存储验证码字段,当点击提交时,可以判断是否验证码一致,应该有更好的解决方案,先暂时用这个:
@PreAuth("email:send")
@RequestMapping("sendEmail")
public ResultJson commonEmail(ToEmail toEmail, HttpServletRequest request) {
// 创建邮件消息
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(toEmail.getTos());
message.setSubject("您本次的验证码是");
String verCode = VerCodeGenerateUtil.generateVerCode();
message.setText("尊敬的xxx,您好:\n"
+ "\n本次请求的邮件验证码为:" + verCode + ",本验证码 5 分钟内效,请及时输入。(请勿泄露此验证码)\n"
+ "\n如非本人操作,请忽略该邮件。\n(这是一封通过自动发送的邮件,请不要直接回复)");
mailSender.send(message);
SysUser user = Context.getUser(request.getHeader("token"));
user.setVerCode(verCode);
return ResultJson.success("发送成功");
然后在邮箱就能看到 验证码了。