springBoot发送邮件(验证码,5分钟过期)超级详细,供大家参考,具体内容如下
自己百度了很久,终于成功了,这里记录一下过程
1。选择邮箱(这里选用邮163箱)
首先在网页登录在设置里面打开POP3和SMTP服务
在application.yaml中配置
要注意的就是这里的密码是授权码而不是密码! ! !如果使用qq邮箱把主机改为smtp.qq.com
2。关于验证码的工具类
私有静态最终字符串符号=?123456789”;/* * * math . random生成的是一般随机数,采用的是类似于统计学的随机数生成规则,其输出结果很容易预测,因此可能导致被攻击者击中。 *而SecureRandom是真随机数,采用的是类似于密码学的随机数生成规则,其输出结果较难预测,若想要预防被攻击者攻击,最好做到使攻击者根本无法,或不可能鉴别生成的随机值和真正的随机值。 */私有静态最终随机随机=new SecureRandom (); 公共静态字符串generateVerCode () { char [] nonceChars=new char [6]; for (int i=0;我& lt;nonceChars.length;我+ +){ nonceChars[我]=SYMBOLS.charAt (RANDOM.nextInt (nonceChars.length)); } 返回新字符串(nonceChars); }/* * *计算两个日期的分钟差 */公共静态int getMinute (fromDate日期,日期迄今为止){ 返回(int) (toDate.getTime ()——fromDate.getTime ())/(60 * 1000);
3.服务模块
/* * *发送验证码到指定邮箱 * @param发件人发送地址 * @param mailSender弹簧自带 * @param接收器接受地址 */AdvanceResponse getCode(字符串发送方,JavaMailSenderImpl mailSender,字符串接收机);/* * *注册用户 */AdvanceResponse addUser(用户用户字符串verCode);
AdvanceResponse是自己封装的返回对象,可以无视
/* * *验证码 */私人字符串代码;/* * *发送时间 */私人sendTime日期; @Override @Async 公共AdvanceResponse getCode(字符串发送方,JavaMailSenderImpl mailSender,字符串接收机){ SimpleMailMessage消息=new SimpleMailMessage (); message.setSubject(“验证码");//设置邮件标题 代码=VerCodeGenerateUtil.generateVerCode (); sendTime=new日期(); message.setText(“尊敬的用户,您好:\ n” + " \ n本次请求的邮件验证码为:" +代码+”,本验证码5分钟内有效,请及时输入。(请勿泄露此验证码)\ n” + " \ n如非本人操作,请忽略该邮件。\ n(这是一封自动发送的邮件,请不要直接回复)");//设置邮件正文 message.setFrom(发送方);//发件的人 message.setTo(接收器);//收件的人 mailSender.send(消息);//发送邮件 返回AdvanceResponse.successResponse (); } @Override 公共AdvanceResponse addUser(用户用户字符串verCode) { 日期日期=new日期();//判断验证码 如果(VerCodeGenerateUtil。getMinute祝辞(sendTime、日期);5){ 返回AdvanceResponse.failedResponse(“验证码已经失效! ! !”); } 如果(! verCode.equals(代码)){ 返回AdvanceResponse.failedResponse(“验证码不正确! ! !”); } user.setRole (0); user.setCreateTime(日期); user.setUpdateTime(日期); userDao.insert(用户); 代码=零; 返回AdvanceResponse.successResponse (); }
@Async表示异步,可以在邮件未发送完成时就返回,而不必等待太长时间,必须在总配置类上加@EnableAsync注解才可以生效
4.控制器模块
@ autowired 私人UserService UserService; @ autowired 私人JavaMailSenderImpl mailSender; @ value (" $ {spring.mail.username} ") 私人字符串发送者;/* * *发送验证码到指定邮箱 */@GetMapping ("/verCode”) 公共AdvanceResponse verCode(字符串接收机){ userService返回。getCode(发送者、mailSender接收机); }/* * *注册用户 */@PostMapping ("/addUser”) 公共AdvanceResponse addUser(用户用户、字符串发送方JavaMailSenderImpl mailSender, @RequestParam (verCode)字符串verCode) { 返回userService.addUser(用户、verCode); }SpringBoot发送邮件功能验证码5分钟过期