• Reids存储邮箱验证码


    先集成Redis

    邮箱验证

    授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
    温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。

    1.QQ邮箱开启 POP3/SMTP服务获取授权码

    进入QQ邮箱,进入设置->账户

    下拉 开启POP3/STMP服务
    在这里插入图片描述
    验证密保
    在这里插入图片描述
    获取授权码
    在这里插入图片描述

    2.在spingboot中配置

    1. 添加依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    2. springboot集成邮件

    spring:
      mail:
        host: smtp.qq.com
        username: 2811662803             # 发送方qq号
        password: xhwyoxrqvtohddff       # 授权码
        default-encoding: utf-8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. 注入 JavaMailSender 对象

    @Autowired
    private JavaMailSender mailSender;
    
    • 1
    • 2

    4. 随机生成6位数字验证码

    	Random random = new Random();
    	//生成0-1000000之内的随机数
    	int randomNum = random.nextInt(1000000);
    	//不足6位补0
    	String randomCode = String.format("%06d", randomNum);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. 发送邮件的逻辑代码

      SimpleMailMessage message = new SimpleMailMessage();
    					message.setFrom("发送方QQ号@qq.com");
    					message.setTo("接收方QQ号@qq.com");
    					message.setSubject("主题:简单邮件验证");
    					message.setText("测试邮件内容");
    					mailSender.send(message);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实例测试

    发送验证码

    前端请求

    //发送验证码
    sendYzm(){
    	var _this = this;//this是vue对象
    	
    	//正则验证邮箱是否合法
    	var email=this.form.account;
    	var reg = /^\w{5,}@[a-z0-9]{2,3}\.[a-z]+$|\,$/;
    	if(!reg.test(email)){
    		_this.$message({
    			message: "邮箱的格式不正确!",
    			type: 'warning'
    		});
    	}
    
    	this.$http.post("/api/login/sendYzm", this.form).then(function(response) {
    		if (response.data.code == 201) {
    			_this.$message({
    				message: response.data.msg,
    				type: 'warning'
    			});
    			return;
    		}
    		if (response.data.code == 200) {
    			_this.$message({
    				message: response.data.msg,
    				type: 'success'
    			});
    			return;
    		}
    	})
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    后端处理

    Controller

    @PostMapping(path = "/sendYzm")
    public CommonResult sendYzm(@RequestBody MailCode mailCode) {//@RequestBody 接收请求体数据
       service.createVerificationCode(mailCode.getAccount());
       return new CommonResult(200, "发送成功",null);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Service

    @Autowired
    RedisTemplate redisTemplate;
    
    @Autowired
    JavaMailSender mailSender;
    
    public void createVerificationCode(String account) {
    	//创建Redis简单string的操作类
       ValueOperations operations = redisTemplate.opsForValue();
       
    	//生成简单的6位验证码
       Random random = new Random();
       int randomNum = random.nextInt(1000000);
       String randomCode = String.format("%06d", randomNum);
    	
    	//发送邮件
       SimpleMailMessage message = new SimpleMailMessage();
       message.setFrom("2811662803@qq.com");
       message.setTo(account);
       message.setSubject("主题:简单邮件验证");
       message.setText("登录验证码:"+randomCode);
       mailSender.send(message);
    
       //设置键值对  k-v = 邮箱:验证码  的有效时间
       operations.set(account, randomCode,1, TimeUnit.MINUTES);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    校验 验证码

    前端请求

    //校验验证码
    checkYzm(){
    	var _this = this;//this是vue对象
    	this.$http.post("/api/login/checkYzm",this.form).then(function(response) {
    		console.log(response.data);
    		if (response.data.code == 201) {
    			_this.$message({
    				message: response.data.msg,
    				type: "warning"
    			});
    			return;
    		}else if (response.data.code == 200) {
    			_this.$message({
    				message: response.data.msg,
    				type: "success"
    			});
    			return;
    		}else{
    			_this.$message({
    				message: response.data.msg,
    				type: "warning"
    			});
    			return;
    		}
    	})
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    后端处理

    Controller

    	@PostMapping(path = "/checkYzm")
        public CommonResult checkYzm(@RequestBody MailCode mailCode) {//@RequestBody 接收请求体数据
            CommonResult res = null;
            boolean bool = false;
            try {
                bool = service.checkCode(mailCode.getAccount(),mailCode.getCode());
                res = new CommonResult(200, "验证成功",bool);
            } catch (Exception e) {
                res = new CommonResult(500, "验证失败",bool);
            }
            return res;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Service

    	public boolean checkCode(String account, String yzm) {
            ValueOperations operations = redisTemplate.opsForValue();
            String compare = (String)operations.get(account);
            if(compare.equals(yzm)){
                return true;
            }
            return false;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    正则验证邮箱
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    超预期!新能源细分市场搭载率逼近20%!5G上车,按下加速键
    python Never是什么?
    Mybatis-Plus自动填充失效原因和解决方案
    Ajax学习笔记第8天
    文件属性==Linux应用编程2
    Prim求最小生成树
    AI前沿-YOLOV9算法
    【计算机组成&体系结构】存储系统基本概念
    HTML读书笔记
    TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案
  • 原文地址:https://blog.csdn.net/lanleihhh/article/details/124886943