SpringBoot实现 QQ邮箱验证码

SpringBoot实现 QQ邮箱验证码

文章目录

  • SpringBoot实现 QQ邮箱验证码
    • 一、开通SMTP校验码
      • 1.登录qq邮箱
      • 2.开启SMTP服务
      • 3.发送手机短信
      • 4.得到授权码
    • 二、回到spring项目中
      • 1.导入所需依赖
      • 2.验证码工具类
      • 3.具体实现逻辑(serviceimpl)
    • 三、测试qq邮箱验证码

一、开通SMTP校验码

1.登录qq邮箱

在这里插入图片描述

2.开启SMTP服务

在这里插入图片描述

3.发送手机短信

在这里插入图片描述

4.得到授权码

在这里插入图片描述

二、回到spring项目中

1.导入所需依赖

 <!--邮箱验证登录导入的依赖--><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.4</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.1</version></dependency><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-core</artifactId></dependency>

2.验证码工具类


/*** QQ邮箱* 随机生成验证码工具类*/
public class ValidateCodeUtils {/*** 随机生成验证码* @param length 长度为4位或者6位* @return*/
//    public static Integer generateValidateCode(int length){
//        Integer code =null;
//        if(length == 4){
//            code = new Random().nextInt(9999);//生成随机数,最大为9999
//            if(code < 1000){
//                code = code + 1000;//保证随机数为4位数字
//            }
//        }else if(length == 6){
//            code = new Random().nextInt(999999);//生成随机数,最大为999999
//            if(code < 100000){
//                code = code + 100000;//保证随机数为6位数字
//            }
//        }else{
//            throw new RuntimeException("只能生成4位或6位数字验证码");
//        }
//        return code;
//    }/*** 随机生成大小写字母和数字的验证码* @return 6位随机验证码*/public static String generateValidateCode(int length) {String code = "";Random random = new Random();for (int i = 0; i < length; i++) {int type = random.nextInt(3);//随机生成数字、大写字母、小写字母switch (type) {case 0:code += (char) (random.nextInt(10) + '0');//数字break;case 1:code += (char) (random.nextInt(26) + 'A');//大写字母break;case 2:code += (char) (random.nextInt(26) + 'a');//小写字母break;}}return code;}/*** 随机生成指定长度字符串验证码* @param length 长度* @return*/public static String generateValidateCode4String(int length){Random rdm = new Random();String hash1 = Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;}
}

/*** 邮箱对应发送信息*/
public class EmailUtil {/*** @param email 发送的邮箱,就是登录时你填的邮箱* @param authCode 填写第一个工具类的随机生成的验证码*/public static void sendAuthCodeEmail(String email, String authCode) {try {SimpleEmail mail = new SimpleEmail();mail.setHostName("smtp.qq.com");//发送邮件的服务器,这个是qq邮箱的,不用修改mail.setAuthentication("xxx@qq.com", "xxx");//第一个参数一般是自己的邮箱第二个参数就是SMTP的授权码,我们上面获取过了mail.setFrom("xxx@qq.com","xxx");  //读一个参数是发送邮件的邮箱,第二个是发件人姓名mail.setSSLOnConnect(true); //使用安全链接mail.addTo(email);//接收的邮箱mail.setSubject("xxx验证码");//设置邮件的主题mail.setMsg("尊敬的用户您好,\n\n感谢您选择我们的服务!您的登录验证码为:"+"["+authCode+"]"+",请妥善保管。请注意,该验证码仅在三分钟内有效,请尽快使用。\n\n若有任何疑问,请随时联系我们。祝您生活愉快");//设置邮件的内容mail.send();//发送} catch (EmailException e) {e.printStackTrace();}}
}

3.具体实现逻辑(serviceimpl)

 	 /*** qq邮箱验证码* @param msg* @return*/@Overridepublic ResponseResult sendEmail(String msg) {//校验msg是否为空if(StringUtils.isNotEmpty(msg)){//不为空则生成随机验证码String code = ValidateCodeUtils.generateValidateCode(6).toString();//生成长度为6的验证码logger.info("验证码code:" + code);//调用直接封装的qq邮箱发送邮箱EmailUtil.sendAuthCodeEmail(msg,code);//把code存放到redis中3分钟redisTemplate.opsForValue().set(msg , code,3, TimeUnit.MINUTES);//键 值 时间 单位return new ResponseResult(200,"发送成功",code);}return new ResponseResult(410,"发送失败",null);}

三、测试qq邮箱验证码

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据不平衡:使用其他机器学习方案,修改算法

数据不平衡&#xff1a; 神经网络在面对不均衡数据时&#xff0c;是束手无策的。有些机器学习方法&#xff0c;像决策树就不会受到不均衡数据的影响。 修改算法&#xff1a; 梨是多数派&#xff0c;需要调整门槛位置&#xff0c;使得更偏向于苹果。只有非常置信的时候&#x…

15-ps命令

常用选项 aux axjf a&#xff1a;显示一个终端所有的进程u&#xff1a;显示进程的归属用户及内存使用情况x&#xff1a;显示没有关联控制终端j&#xff1a;显示进程归属的进程组idf&#xff1a;以ASCII码的形式显示出进程的层次关系 ps aux其中| more是只显示一部分内容&…

iOS——runtime

什么是runtime 我们都知道&#xff0c;将源代码转换为可执行的程序&#xff0c;通常要经过三个步骤&#xff1a;编译、链接、运行。 C 语言 作为一门静态类语言&#xff0c;在编译阶段就已经确定了所有变量的数据类型&#xff0c;同时也确定好了要调用的函数&#xff0c;以及函…

如何通过ETL工具对数据进行去重

在数据处理流程中&#xff0c;数据去重是一个至关重要的环节&#xff0c;它能够确保数据分析的准确性和效率。ETL&#xff08;Extract, Transform, Load&#xff09;工具作为数据集成的重要组成部分&#xff0c;提供了强大的功能来帮助用户实现数据的抽取、转换和加载&#xff…

高级查询(一)

解决需求&#xff1a;Excel都可以轻松搞定 分组查询原理&#xff1a; 语法&#xff1a; SELECT …<列名> FROM <表名> [WHERE<条件表达式> ] GROUP BY 参与分组的列 可以与 聚合函数作用的列 一块显示 注意 SELECT列表中只能包含&#xff1a; 1、被分…

算法-卡尔曼滤波之卡尔曼滤波的其他三个方程

一维不带噪声的卡尔曼滤波方程有五个&#xff0c;下面分析剩余的三个方程&#xff1a; 分析第一个例子&#xff0c;其中测量值和真实值之间的误差属于测量误差&#xff08;使用准确性来描述&#xff09;&#xff0c;由于测量误差是随机的&#xff0c;我们可以使用方差来描述&am…

Nginx 代理 MySQL 实现通过域名连接数据库

文章目录 Nginx 模块介绍Stream 模块配置远程连接 MySQLDataGrip 连接 MySQL Nginx 安装这里不做介绍。域名默认已经解析到服务器公网IP。 Nginx 模块介绍 HTTP 模块&#xff1a; HTTP模块提供了处理HTTP请求的功能&#xff0c;包括反向代理、负载均衡、缓存、HTTP代理等。 例…

搜索整个文件夹的所有日志

grep request * 这里的*就是全部文件 grep -e A -e b" * grep -rine "关键字"

遇到难题 暗区突围掉宝Twitch绑定关联账号显示404

Twitch作为一个广受欢迎的直播平台&#xff0c;经常会举办各种与游戏相关的互动活动&#xff0c;如“掉宝活动”&#xff0c;其中就包括了与《暗区突围》的合作。这类活动允许观众在观看指定的Twitch直播时&#xff0c;通过将他们的Twitch账号与《暗区突围》游戏账号绑定&#…

(二刷)代码随想录第6天|242.有效的字母异位词、349.两个数组的交集

242.有效的字母异位词 242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 学透哈希表&#xff0c;数组使用有技巧&#xff01;Leetcode&#xff1a;242.有效的字母异位词_哔哩哔哩_bilibili 给定两个字符串 s 和 t &#xff…

使用Pyramid、Mako和PyJade生成 HTML

Pyramid 是一个流行的 Python Web 框架&#xff0c;而 Mako 和 PyJade 是用于模板引擎的工具&#xff0c;它们可以与 Pyramid 配合使用来生成 HTML 内容。但是在实际使用中还是有些差别的&#xff0c;尤其会遇到各种各样的问题&#xff0c;下面我将利用我所学的知识一一为大家解…

Vue3组件库开发项目实战——03封装Button组件/输出vitePress文档

Vue3组件库开发项目实战——01组件开发必备知识导学-CSDN博客 Vue3组件库开发项目实战——02项目搭建&#xff08;配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest&#xff09;-CSDN博客 在前面两篇博客中&#xff0c;我分别介绍了组件库开发必学知识&#xff0c;以及…

免费pr相册模板mogrt|手机壁纸AI绘画摄影作品照片展示模板视频素材

pr相册模板mogrt&#xff0c;手机壁纸、电脑桌面壁纸、AI绘画、摄影作品、照片展示模板视频素材。 Premiere Pro 2023及以上版本。 全高清&#xff08;19201080&#xff09;分辨率/30fps。 通用表达式&#xff08;适用于所有特效语言&#xff09;。 免费下载&#xff1a;https…

自动删除 PC 端微信缓存数据,包括从所有聊天中自动下载的大量文件、视频、图片等数据内容,解放你的空间。

Clean My PC Wechat 自动删除 PC 端微信自动下载的大量文件、视频、图片等数据内容&#xff0c;解放一年几十 G 的空间占用。 该工具不会删除文字的聊天记录&#xff0c;请放心使用。请给个 Star 吧&#xff0c;非常感谢&#xff01; 现已经支持 Windows 系统中的所有微信版本…

整合Tess4J图文识别技术

仓库地址&#xff1a;https://gitee.com/z3inc/tess4j-demo.git 1. OCR图文识别介绍 OCR&#xff08;全称 Optical Character Recognition&#xff0c;直译为光学字符识别&#xff09;用于图片文字识别&#xff0c;例如 提取图片中车牌号等等。 Java中实现OCR的技术方案有&…

DGC-GNN 配置运行

算法 DGC-GNN&#xff0c;这是一种全局到局部的图神经网络&#xff0c;用于提高图像中2D关键点与场景的稀疏3D点云的匹配精度。与依赖视觉描述符的方法相比&#xff0c;这种方法具有较低的内存需求&#xff0c;更好的隐私保护&#xff0c;并减少了对昂贵3D模型维护的需求。DGC-…

基于51单片机的时钟万年历—可农历显示

基于51单片机的时钟万年历 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1、可以显示年、月、日、时、分、秒、星期、农历&#xff1b; 2、按键可以设置闹钟及报警&#xff1b; 3、按键可以调整时…

[Java EE] 文件IO (二):文件内容读写-----数据流

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

(2024,MambaOut,Mamba 适合长序列,区分指标,不适合分类,适合检测和分割)视觉真的需要 Mamba 吗?

MambaOut: Do We Really Need Mamba for Vision? 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 3. 概念讨论 3.1 Mamba 适合哪些任务&#xff1f; 3.2 视觉识别任…

echarts实现金价可视化大屏(项目实战)

前言 最近由于某种原因参加了一个比赛&#xff0c;三天时间肝出来一个可视化大屏项目&#xff08;无后端&#xff09;&#xff0c;代码已开源&#xff0c;但是还在比赛期间不知道会不会影响到 技术使用&#xff1a;html&#xff0c;css&#xff0c;js&#xff0c;echarts&#…