java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot邮箱验证码登录注册

SpringBoot-Mail工具实现邮箱验证码登录注册功能

作者:Dpaper

现在许多pc程序都有着使用邮箱验证码实现登录注册的功能,那么我们应该如何完成邮箱验证码功能呢,我们可以使用springboot内置的springboot-mail再结合redis来完成这个功能,感兴趣的朋友跟随小编一起看看吧

前言

现在许多pc程序都有着使用邮箱验证码实现登录注册的功能,那么我们应该如何完成邮箱验证码功能呢,我们可以使用springboot内置的springboot-mail再结合redis来完成这个功能。

代码实现

一、引入springboot-mail和redis依赖

<!--邮箱依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--redis依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、邮箱常量类

public class MailConstant {
   /**
    * 邮箱验证redis前缀
    */
   public static final String CODE_KEY_PREFIX = "mail:";
}

三、邮箱工具类

@Slf4j
@Service
public class MailUtils {
   @Resource
   RedisTemplate<String, Integer> redisTemplate;
   @Resource
   private JavaMailSenderImpl mailSender;
   public void sendMail(Mail mail) throws MailSendException {
      try {
         MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);
      if (mail.getFrom() == null || mail.getFrom().isEmpty()) {
         mail.setFrom("xxx");
      }
      //邮件发信人
      messageHelper.setFrom(mailSender.getUsername() + '(' + mail.getFrom() + ')');
      //邮件收信人
      messageHelper.setTo(mail.getTo().split(","));
      //邮件主题
      messageHelper.setSubject(mail.getSubject());
      //邮件内容
      messageHelper.setText(mail.getText());
      //发送邮件
      mailSender.send(messageHelper.getMimeMessage());
      } catch (Exception e) {
         log.warn("邮件发送失败:{}", e.getMessage());
         throw new MailSendException("邮件发送失败:" + e.getMessage());
      }
   }
   /**
    * 发送验证码邮件
    *
    * @param mail 邮件信息
    */
   public void sendVerificationCode(Mail mail) {
      // 判断当前待发送邮箱是否已经有验证码
      String key = CODE_KEY_PREFIX + mail.getTo();
      Integer code = redisTemplate.opsForValue().get(key);
      if (code != null) {
         throw new UserException("当前邮箱已经发送验证码");
      }
      // 生成随机 6位验证码
      int idenCode = (int) ((Math.random() * 9 + 1) * 100000);
      mail.setSubject("xxx");
      mail.setText("验证码:" + idenCode);
      redisTemplate.opsForValue().set(key, idenCode, 60, TimeUnit.SECONDS);
      sendMail(mail);
   }
}

四、代码调用

4.1 发送邮箱

/**
 * 发送邮箱验证码
 *
 * @param email 用户邮箱
 * @return 发送结果
 */
@PostMapping("send/code")
public Result<?> sendUserMail(String email) {
    Mail mail = new Mail();
    mail.setTo(email);
    mailUtils.sendVerificationCode(mail);
    return Result.ok(null, "发送成功");
}

4.2 用户注册

@Override
public boolean userRegister(User user, Integer captcha) {
    //判断用户是否已经注册
    User exist = getOne(Wrappers.<User>lambdaQuery().eq(User::getMail, user.getMail()));
    if(exist!=null){
        throw new UserException("用户已注册");
    }
    // 判断验证码是否相同
    String key = CODE_KEY_PREFIX + user.getMail();
    Integer authcode = (Integer) redisTemplate.opsForValue().get(key);
    if (authcode == null) {
        throw new UserException("验证码已过期,请重新发送");
    }
    if (!authcode.equals(captcha)) {
        throw new UserException("验证码错误");
    }
    return userMapper.insert(user)>0;
}

总结

以上就是springboot实现邮箱验证码登录注册的基本实现,觉得有用的大家可以点点赞。

到此这篇关于SpringBoot-Mail工具的使用-实现邮箱验证码登录注册的文章就介绍到这了,更多相关SpringBoot邮箱验证码登录注册内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文