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

 更新时间:2024年07月16日 10:13:23   作者: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邮箱验证码登录注册内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring通过ApplicationContext主动获取bean的方法讲解

    Spring通过ApplicationContext主动获取bean的方法讲解

    今天小编就为大家分享一篇关于Spring通过ApplicationContext主动获取bean的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java递归算法详解(动力节点整理)

    Java递归算法详解(动力节点整理)

    Java递归算法是基于Java语言实现的递归算法。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。接下来通过本文给大家介绍Java递归算法相关知识,感兴趣的朋友一起学习吧
    2017-03-03
  • SpringMvc获取页面中的参数方法详解

    SpringMvc获取页面中的参数方法详解

    这篇文章主要介绍了SpringMvc获取页面中的参数方法详解,获取页面的参数通常都是让类实现设置HttpServletRequest request接口然后重写接口中的方法的办法来得到参数,但是在Springmvc中有其他的获取方法,需要的朋友可以参考下
    2023-10-10
  • JAVA多线程之中断机制及处理中断的方法

    JAVA多线程之中断机制及处理中断的方法

    这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理,感觉对InterruptedException异常进行处理是一件谨慎且有技巧的活儿,需要的朋友可以参考下
    2023-02-02
  • java通过模拟post方式提交表单实现图片上传功能实例

    java通过模拟post方式提交表单实现图片上传功能实例

    这篇文章主要介绍了java通过模拟post方式提交表单实现图片上传功能实例,涉及Java针对表单的提交操作响应及文件传输的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 使用spring boot开发时java对象和Json对象转换的问题

    使用spring boot开发时java对象和Json对象转换的问题

    这篇文章主要介绍了使用spring boot开发时java对象和Json对象转换的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • spring cloud consul使用ip注册服务的方法示例

    spring cloud consul使用ip注册服务的方法示例

    这篇文章主要介绍了spring cloud consul使用ip注册服务的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Java中的"找不到符号"错误解决办法

    Java中的"找不到符号"错误解决办法

    开发中遇到一个问题,当我用idea开发工具将新的项目代码从GitLab上面拉取下来,所有的Maven依赖也导入成功,然后启动项目,结果报错:java:找不到符号,这篇文章主要给大家介绍了关于Java中"找不到符号"错误的解决办法,需要的朋友可以参考下
    2023-10-10
  • Spring注解实现自动装配过程解析

    Spring注解实现自动装配过程解析

    这篇文章主要介绍了Spring注解实现自动装配过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论