SpringBoot发送邮件功能验证码5分钟过期

  

springBoot发送邮件(验证码,5分钟过期)超级详细,供大家参考,具体内容如下

  

自己百度了很久,终于成功了,这里记录一下过程

  

1。选择邮箱(这里选用邮163箱)

  

首先在网页登录在设置里面打开POP3和SMTP服务

  

 SpringBoot发送邮件功能验证码5分钟过期

  

在application.yaml中配置

  

 SpringBoot发送邮件功能验证码5分钟过期

  

要注意的就是这里的密码是授权码而不是密码! ! !如果使用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分钟过期