实现邮箱发送验证码功能

打印 上一主题 下一主题

主题 931|帖子 931|积分 2793

邮箱验证步骤

本文使用了redis数据库做验证码的缓存,不想用redis数据库也可以直接将验证码放入mysql中,设置验证码有效期即可。
导入依赖
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>
复制代码
application.yaml

【用yaml在后面注入JavaMailSender的bean时会爆红但不会影响运行,因为JavaMailSenderImpl在初始加载时是要读取properties,不读取yaml,但运行后就会读取了】
  1. spring:
  2.   mail:
  3.           # 163邮箱的地址为smtp.163.com,直接填写即可
  4.     host: smtp.163.com
  5.     # 你申请的163邮箱
  6.     username: xxxxxx@163.com
  7.     # 注意密码是在开启smtp/pop3时自动生成的,不是邮箱密码,记得保存一下,不然就找不到了
  8.     password: xxxxxxxxxxx
复制代码
放入静态资源,创建相应的controller

此处省略一万字~~~
编写service接口,以及其实现类(接口和controller自己想)
  1. @Service
  2. public class VerifyServiceImpl implements VerifyService {
  3.     @Resource
  4.     JavaMailSender sender;  //一个用于发送邮箱的类
  5.     @Resource
  6.     StringRedisTemplate template;   //用于Redis数据库操作
  7.     @Value("${spring.mail.username}")
  8.     String email;
  9.     @Override
  10.     public void sendVerifyCode(String mail) {
  11.         SimpleMailMessage message = new SimpleMailMessage();
  12.         //邮件标题
  13.         message.setSubject("【xxx网站】您的注册码");
  14.         //设置随机数作为验证码
  15.         Random random = new Random();
  16.         int code = random.nextInt(89999) + 10000;//小心机
  17.         //用redis保存验证码
  18.         //提前验证一下,如果发送了多次则删除上一次的验证码,保留最新的验证码
  19.         if (template.opsForValue().get("verify:code:"+mail)!=null){
  20.             template.delete("verify:code:"+mail);
  21.         }
  22.         template.opsForValue().set("verify:code:"+mail,code+"",5, TimeUnit.MINUTES);//设置五分钟过期时间
  23.         //邮件内容
  24.         message.setText("您的验证码是:"+code+",五分钟有效,请及时完成注册。若不是本人操作请忽略");
  25.         message.setFrom(email); //谁发送,必须和yaml文件中的账号一致
  26.         message.setTo(mail);   //谁接收
  27.         sender.send(message);
  28.     }
  29.     @Override
  30.     public boolean doVerify(String mail, String code) {
  31.         String string = template.opsForValue().get("verify:code:"+mail);
  32.         if (string.equals(code)){
  33.             template.delete("verify:code:"+mail);
  34.             return true;
  35.         }
  36.         return false;
  37.     }
  38. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表