当前位置:   article > 正文

SpringBoot实现邮箱验证_springboot邮箱验证

springboot邮箱验证

目录

1、开启邮箱IMAP/SMTP服务,获取授权码

2、相关代码

        1、使用配置Redis(用于存储验证码,具有时效性)

        2、邮箱依赖和hutool(用于随机生成验证码)

        3、配置Redis和邮箱信息

        4、开启Redis服务

        5、编写发送邮箱验证码

        6、邮箱登录验证功能

3、测试


1、开启邮箱IMAP/SMTP服务,获取授权码

        1、登录邮箱(以qq邮箱为例),点击邮箱右上角邮箱-设置-常规-第三方服务,会有如下选项

        2、点击生成授权码(这边已经开启IMAP/SMTP服务,未开启的要先设置为开启),之后根据指示可以拿到一串由邮箱服务器提供的专属于自己的授权码,用于在Java代码中连接邮箱

2、相关代码

        1、使用配置Redis(用于存储验证码,具有时效性)
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
        2、邮箱依赖和hutool(用于随机生成验证码
  1. <!-- 邮箱验证码依赖 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-mail</artifactId>
  5. </dependency>
  6. <!-- 一个很强大的工具库 -->
  7. <dependency>
  8. <groupId>cn.hutool</groupId>
  9. <artifactId>hutool-all</artifactId>
  10. <version>5.8.19</version>
  11. </dependency>
        3、配置Redis和邮箱信息
  1. redis:
  2. host: localhost
  3. port: 6379
  4. mail:
  5. host: smtp.qq.com
  6. protocol: smtp
  7. default-encoding: UTF-8
  8. username: 【这里填发件人邮箱,可以是你自己的】
  9. password: 【这里填刚刚从邮箱网站中拿到的授权码,注意不是自己的邮箱密码!!】
  10. nickname: 【发件人自命名】
  11. properties:
  12. mail.smtp.auth: true #启用SMTP服务器的身份验证,这是为了确保只有合法用户可以发送邮件。
  13. mail.smtp.starttls.enable: #启用TLS加密,这是为了确保邮件传输的安全性。
  14. mail.smtp.starttls.required: true #要求使用TLS加密,如果连接不是通过TLS加密传输,则连接将失败。
        4、开启Redis服务

        这里以windows作为举例:

        5、编写发送邮箱验证码
  1. import cn.hutool.core.util.RandomUtil;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.data.redis.core.RedisTemplate;
  5. import org.springframework.mail.SimpleMailMessage;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import java.util.concurrent.TimeUnit;
  12. @RestController
  13. @RequestMapping("/email")
  14. public class EmailController {
  15. @Autowired
  16. private JavaMailSender javaMailSender;
  17. @Autowired
  18. private RedisTemplate redisTemplate;
  19. @Value("${spring.mail.username}")
  20. private String sender;
  21. @Value("${spring.mail.nickname}")
  22. private String nickname;
  23. @GetMapping("/code")
  24. public String getCode(@RequestParam("email") String email){
  25. // 创建一个邮件
  26. SimpleMailMessage message = new SimpleMailMessage();
  27. // 设置发件人
  28. message.setFrom(nickname+'<'+sender+'>');
  29. // 设置收件人
  30. message.setTo(email);
  31. // 设置邮件主题
  32. message.setSubject("欢迎访问"+nickname);
  33. //生成六位随机数
  34. String code = RandomUtil.randomNumbers(6);
  35. //将验证码存入redis,有效期为5分钟
  36. redisTemplate.opsForValue().set("email_code_"+email, code, 300000, TimeUnit.MILLISECONDS);
  37. String content = "【验证码】您的验证码为:" + code + " 。 验证码五分钟内有效,逾期作废。\n\n\n" +
  38. "------------------------------\n\n\n" ;
  39. message.setText(content);
  40. // 发送邮件
  41. javaMailSender.send(message);
  42. return "发送成功";
  43. }
  44. }
        6、邮箱登录验证功能
  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @Resource
  5. private RedisTemplate redisTemplate;
  6. // 通过邮箱验证登录
  7. @PostMapping("/loginByEmail")
  8. public ResponseBean loginByEmail(@RequestParam(value = "code") String code) {
  9. String email = "【这里写你已经收到验证码的邮箱】";
  10. String emailKey = "email_code_"+email;
  11. String storedToken = (String) redisTemplate.opsForValue().get(emailKey);
  12. if(code.equals(storedToken)){
  13. return ResponseBean.success("验证成功",null);
  14. }else {
  15. return ResponseBean.error("验证失败");
  16. }
  17. }
  18. }

3、测试

                                                 成功接收到来自发送方的验证码

再进行邮箱登录测试

    

        检查Redis服务器存储情况:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/686302
推荐阅读
相关标签
  

闽ICP备14008679号