使用QQ邮箱进行登录验证

使用场景不多说,接下来直接看实现~

登录到QQ邮箱,进入设置

打开IMAP/SMTP服务,记得把授权码记录下来,后面配置文件中需要用到

新建application的配置文件


spring:
  mail:
    # 指定邮件服务器地址
    host: smtp.qq.com
    username: 你自己的qq邮箱
#    授权码
    password: QQ邮箱上获取的授权码信息
#    端口
    port: 465
#    默认编码
    default-encoding: UTF-8
#    使用协议
    protocol: smtps
#    其他属性
    properties:
      "mail.smtp.connectiontimeout": 5000
      "mail.smtp.timeout": 3000
      "mail.smtp.writetimeout": 5000
      "mail.smtp.auth": true
      "mail.smtp.starttls.enable": true
      "mail.smtp.starttls.required": true

先创建一个随机生成验证码的方法

package com.yinan.util;


//随机生成6位邮箱验证码
public class EmailRandomUtil {
    public static String randomNumBuilder(){
        String result="";
        for(int i=0;i<6;i++){
            result+=Math.round(Math.random()*9);
        }
        return result;
    }
}

 接下来实现具体验证逻辑,我这里只做了简单的验证码认证 

public SaResult sendEmailToUser(HttpServletRequest request, String email) throws Exception {
        //        创建一个邮件消息
        MimeMessage message = javaMailSender.createMimeMessage();
//        创建 MimeMessageHelper 对象,第二个 boolean 参数表示,是否是一个 Multipart 邮件(带有附件)。
        MimeMessageHelper helper = new MimeMessageHelper(message, false);
//        发件人邮箱和名称
        helper.setFrom(emailUserName, "鹿灵");
        helper.setTo(email);
//        邮件标题
        helper.setSubject("这是银氨发送给您的登录验证码信息");
        try {
            String ip = request.getRemoteAddr();
//            生成验证码
            String code = EmailRandomUtil.randomNumBuilder();
            //        邮件正文
            helper.setText("您的验证码信息为:<strong>" + code + "</strong>,当前验证码有效时长为<strong>5分钟</strong>,请尽快进行登录验证,如非本人操作,请忽视!", true);
            System.out.println(code);
            ValueOperations<String, String> forValue = redisTemplate.opsForValue();
//将验证码信息存放在redis中,设置过期时间为5分钟后过期            
forValue.set(ip + "_code_"+email, code, 5, TimeUnit.MINUTES);
            //        发送
            javaMailSender.send(message);
            return SaResult.ok("邮件发送成功,ip信息为:" + ip);
        } catch (Exception e) {
            e.printStackTrace();
            return SaResult.error("发送失败");
        }

    }

以上代码均做有注释,各位可以看看,直接copy也可以,我获取的验证码信息是存在redis中的,所以记得要开redis

以下是redis的配置

  #  redis配置
  redis:
    #    redis数据库索引
    database: 0
    #    redis服务器地址
    host: localhost
    #    redis服务器连接端口
    port: 6379
    #    redis服务器连接密码
    password: 123
    #        连接超时时间(毫秒)
    timeout: 10s
    lettuce:
      pool:
        # 连接池最大连接数
        max-active: 200
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
        # 连接池中的最大空闲连接
        max-idle: 10
        # 连接池中的最小空闲连接
        min-idle: 0

运行后就可以看到你的邮箱中有验证码信息啦~

 以上就是所有功能的实现啦~

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式与一致性协议之拜占庭将军问题(一)

拜占庭将军问题 概述 拜占庭将军问题其实是借拜占庭将军故事展现了分布式共识问题&#xff0c;探讨和论证了解决的办法。实际上&#xff0c;拜占庭将军问题是分布式领域最复杂的一个容错模型&#xff0c;一旦搞懂了它&#xff0c;久能掌握分布式共识问题的解决思路&#xff0…

NTLM认证

文章目录 1.概念(1) 本地认证(2) SAM(3) NTLM Hash(4) NTLM 和 NTLM Hash(5) NTLM v2 1.概念 (1) 本地认证 Windows不存储用户的明文密码&#xff0c;它会将用户的明文密码经过加密后存储在 SAM (Security Account Manager Database&#xff0c;安全账号管理数据库)中。 (2)…

Marching Cubes算法

Marching Cubes算法 1. 简介2. 算法原理的理解2.1 如何找到面经过的这些小块(六面体)&#xff1f;2.2 找到后&#xff0c;如何又进一步的找到面与这些小块(六面体)的交点&#xff1b;2.3 这些交点按照怎么的拓扑连接关系连接&#xff0c;是怎么操作的&#xff1f; 3. 总结4. 参…

【链表】Leetcode 两数相加

题目讲解 2. 两数相加 算法讲解 我们这里设置一个头结点&#xff0c;然后遍历两个链表&#xff0c;使用一个flag记录相加的结果和进位&#xff0c;如果两个链表没有走到最后或者进位不等于0&#xff0c;我们就继续遍历处理进位&#xff1b;如果当前的链表都遍历完成了&#x…

基于springboot实现的摄影跟拍预定管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

【系统分析师】多媒体技术与知识产权标准化

文章目录 一、多媒体技术1、音频2、图像3、媒体的分类4、有损压缩和无损压缩5、多媒体标准 二、知识产权标准化1、保护范围和对象2、保护期限3、知识产权人确定4、侵权判定5、标准化 一、多媒体技术 1、音频 # 声音文件格式 .wav .mp3 .ra .mid .snd .au .aif .voc2、图像 # 彩…

一招下载transformers真不用网上那些教程(我试了1*mol多次才知道)

pip很多是2 然而&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;…

ASP.NET大文件分片上传

ASP.NET大文件分片上传&#xff0c;C#上传大型视频文件到服务器,解决方案&#xff0c;用C# 实现断点续传 (HTTP)&#xff0c;ASP.NET实现文件夹的上传和下载&#xff0c;.NET使用WEBUPLOADER做大文件的分块和断点续传&#xff0c;ASP.NET实现文件上传和下载&#xff0c;完美解决…

fastgpt、dify功能分析比较

目录 前言 一、dify、fastgpt是什么&#xff1f; 二、同场pk 1.大模型接入 2.chat&#xff08;最简应用&#xff09; 3.发布应用 4.知识库 5.workflow 6.其他 三、一些point记录 总结 前言 现在都开始AI应用开发&#xff0c;何谓AI应用&#xff0c;起码要和AI大模型…

13-LINUX--消息队列

一.消息队列 1.消息队列&#xff1a;消息队列为一个进程向另一个进程发送一个数据块提供了条件&#xff0c;每个数据块会包含一个类型。 2.相关函数 1>.msgget(key_t key,int msgflg) : 创建消息队列 2>. msgsnd&#xff1a;把消息添加到消息队列 3>.msgrcv &#xf…

【iOS开发】(四)react Native第三方组件五个20240419-20

react native 外的 第三方组件 目录标题 react native 外的 第三方组件&#xff08;一&#xff09;与rn核心组件的使用步骤区别&#xff1a;&#xff08;二&#xff09;第三方组件概览1 WebView2 Picker3 Swiper4 AsyncStorage5 Geolocation6 Camera (三)详细学习1 WebViewCoco…

C语言 分支控制语句之 if

然后 我们来说 流程控制语句之 if 选择控制结构 是通过 分支语句来实现的 其中 包括 单分支选择语句通过 (if) 来实现 双分支语句通过 (if) 和 (else) 实现 多分支语句通过 (if) (else if) (else) 实现 对于单分支来讲 它控制的语句就是 要嘛做 要嘛不做 好比如 放假了 你是…

MySQL基础之单表操作(定义DDL,增删改DML,查DQL)

目录 一、概述1.1 什么是数据库1.2 连接MySQL1.3 数据模型1.4 SQL语句的分类1.5 数据类型 二、数据库设计-DDL2.1 数据库层面2.2 数据表层面创建表约束查询修改add,modify,change,drop,rename删除 三、数据库操作-DML3.1 添加数据insert3.2 修改数据update3.3 删除数据delete 四…

插值与重采样在AI去衣技术中的关键作用

在人工智能&#xff08;AI&#xff09;的众多应用中&#xff0c;去衣技术作为一种新兴的图像处理技术&#xff0c;逐渐引起了广泛关注。这项技术不仅涉及复杂的计算机视觉和深度学习算法&#xff0c;还需要对图像处理中的插值与重采样技术有深入的理解。本文将详细探讨插值与重…

霸气归来,AKG N9 Hybrid头戴式降噪耳机震撼发布!手边的“大耳”瞬间不香了?

自1947年Rudolf Grike博士和Ernst Pless先生在“音乐之都”维也纳创立AKG以来&#xff0c;品牌已经走过77载辉煌历程&#xff0c;其产品被广泛应用于全球各大巡回演出和录音棚中&#xff0c;为全球音乐爱好者和专业人士提供了无数优质的声音体验。 近日&#xff0c;AKG再度以王…

(一)Java EE企业级应用开发实战之Servlet教程——JDK安装

首先打开清华大学开源软件镜像站&#xff0c;清华大学开源镜像网站地址为&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/ 打开该地址后的界面显示如下图所示 找到8版本对应的SDK安装包&#xff0c;我现在用的开发机器是Windows&#xff0c;所以我找的是Windows对应的版本…

手机文件怎么传给商家打印?

在数字化时代&#xff0c;手机已经成为我们生活和工作中不可或缺的工具。当需要将手机中的文件传给商家打印时&#xff0c;传统的打印店往往要求通过微信等社交软件传输文件&#xff0c;这种方式非常操作繁琐。那么&#xff0c;手机文件怎么传给商家打印呢&#xff1f;琢贝云打…

Kotlin语法快速入门-函数(4)

Kotlin语法快速入门-函数&#xff08;4&#xff09; 文章目录 Kotlin语法快速入门-函数&#xff08;4&#xff09;四、函数1、函数定义2、infix关键字3、参数省略4、函数类型参数5、多参数--vararg 四、函数 1、函数定义 fun 函数名(参数: 类型) &#xff1a;返回值类型{//函…

“EDM邮件营销”如何构建企业获客增长新赛道

在这个瞬息万变的数字时代&#xff0c;企业的营销策略不断进化&#xff0c;以求在激烈的市场竞争中脱颖而出。其中&#xff0c;“EDM&#xff08;Electronic Direct Mail&#xff09;邮件营销”作为一项经典且高效的营销手段&#xff0c;正借助先进的技术力量&#xff0c;重新焕…

网络常识!!!

网络常识!!! 一:网络的发展史二:关键的概念三:IP地址四:端口号二级目录二级目录二级目录二级目录三级目录 一:网络的发展史 从游戏方面发展历程进行理解: 从单机游戏-----游戏支持局域网对战-------游戏支持广域网对战-------移动端 (1)局域网对战:在同一个网吧里,不同的游戏…