实现邮箱发送验证码功能

实现邮箱发送验证码功能

实现注册和忘记密码界面的邮箱发送验证码功能

邮箱验证步骤

本文使用了redis数据库做验证码的缓存,不想用redis数据库也可以直接将验证码放入mysql中,设置验证码有效期即可。

导入依赖


    org.springframework.boot
    spring-boot-starter-mail

application.yaml

【用yaml在后面注入JavaMailSender的bean时会爆红但不会影响运行,因为JavaMailSenderImpl在初始加载时是要读取properties,不读取yaml,但运行后就会读取了】

spring:
  mail:
    # 163邮箱的地址为smtp.163.com,直接填写即可
    host: smtp.163.com
    # 你申请的163邮箱
    username: xxxxxx@163.com
    # 注意密码是在开启smtp/pop3时自动生成的,不是邮箱密码,记得保存一下,不然就找不到了
    password: xxxxxxxxxxx

放入静态资源,创建相应的controller

此处省略一万字~~~

编写service接口,以及其实现类(接口和controller自己想)

@Service
public class VerifyServiceImpl implements VerifyService {
    @Resource
    JavaMailSender sender;  //一个用于发送邮箱的类
    @Resource
    StringRedisTemplate template;   //用于Redis数据库操作
    @Value("${spring.mail.username}")
    String email;

    @Override
    public void sendVerifyCode(String mail) {
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件标题
        message.setSubject("【xxx网站】您的注册码");
        //设置随机数作为验证码
        Random random = new Random();
        int code = random.nextInt(89999) + 10000;//小心机
        //用redis保存验证码
        //提前验证一下,如果发送了多次则删除上一次的验证码,保留最新的验证码
        if (template.opsForValue().get("verify:code:"+mail)!=null){
            template.delete("verify:code:"+mail);
        }
        template.opsForValue().set("verify:code:"+mail,code+"",5, TimeUnit.MINUTES);//设置五分钟过期时间
        //邮件内容
        message.setText("您的验证码是:"+code+",五分钟有效,请及时完成注册。若不是本人操作请忽略");
        message.setFrom(email); //谁发送,必须和yaml文件中的账号一致
        message.setTo(mail);   //谁接收
        sender.send(message);
    }

    @Override
    public boolean doVerify(String mail, String code) {
        String string = template.opsForValue().get("verify:code:"+mail);
        if (string.equals(code)){
            template.delete("verify:code:"+mail);
            return true;
        }
        return false;
    }
}

本文来自博客园,作者:不吃紫菜,遵循CC 4.0 BY-SA版权协议,

转载请附上原文出处链接:https://www.cnblogs.com/buchizicai/p/16517289.html及本声明;

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Original: https://www.cnblogs.com/buchizicai/p/16517289.html
Author: 不吃紫菜
Title: 实现邮箱发送验证码功能

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578706/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 解决某些情况下 ECharts 饼图多行标签重叠问题

    解决某些情况下 ECharts 饼图多行标签重叠问题 对于多行标签的重叠问题,其实一直没有一个完美的解决方案。 我能在网上查到的比较全面的解决方法就是这个:https://zhua…

    Linux 2023年6月7日
    089
  • Linux_shell基础

    注意, 这里在运行时一定要写成./test.sh,而不是 test.sh, 运行其它二进制的程序也一样,直接写 test.sh,Linux 系统会去 PATH(环境变量) 里寻找有…

    Linux 2023年5月27日
    0104
  • 接口测试

    :配置windows中特定应用的抓包(默认抓取不到) :添加备注信息 :重新发起指定请求 :清空指定会话内容 :断点放行 :模式切换 :相应数据解码 :抓取指定进程发出的请求 :关…

    Linux 2023年6月7日
    073
  • redis集群部署

    Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式…

    Linux 2023年6月7日
    088
  • 【vue 引入cdn加载失败 解决办法】

    在项目index.html中放上 生产环境下自动加载 src下可以把文件放到自己服务器,本地加载 Original: https://www.cnblogs.com/Slience…

    Linux 2023年6月8日
    0102
  • 【原创】Linux虚拟化KVM-Qemu分析(十一)之virtqueue

    背景 Read the fucking source code! –By 鲁迅 A picture is worth a thousand words. –…

    Linux 2023年6月8日
    081
  • VS2022编译太慢

    解决方法是把编译出的exe程序或目录添加到杀毒软件白名单 一个C++的helloworld,在vs里硬是10秒才能编译启动。不知道大家有没有遇到。禁用符号加载还是很慢。甚至换成co…

    Linux 2023年6月6日
    0105
  • 关于.NET CORE 编译时错误:Microsoft.AspNetCore.Razor.Design.CodeGeneration.targets(79, 5): The project XXXXX must provide a value for Configuration.

    此笔记记载了本人在编译.Net Core项目时遇到的 Microsoft.AspNetCore.Razor.Design.CodeGeneration.targets(79, 5)…

    Linux 2023年6月14日
    0107
  • Scipy

    1.Scipy简介 使用python做科学计算,详情参考官方文档 scipy软件包包含专用于科学计算中常见问题的各种工具箱,他的不同子模块对应于不同的应用程序,例如插值,积分,优化…

    Linux 2023年6月6日
    078
  • docker操作常用命令:

    镜像查询:docker seacher xxxx 下载: dcoker pull xxx 查看下载的镜像: docker images 运行docker :以redis 为例: d…

    Linux 2023年6月13日
    086
  • gitlab部署

    Gitlab部署 Gitlab部署 Gitlab的基本使用 新建项目 使用命令行的方式管理项目 上传文件 新建分支 拉取文件 //配置yum源 [root@localhost ~]…

    Linux 2023年6月13日
    099
  • linux ssh连接自动断开问题

    场景描述:云上的虚拟机使用public ip连接ssh时,一直提示已经连接,但是就会自动关闭 通过正常虚拟机作为跳板,能够连接到目标机子上,检查发现进程正常,但是就一直连接不上 发…

    Linux 2023年6月7日
    079
  • 操作系统

    第1章习题1. 设计现代OS的主要目标是什么? OS的作用可表现在哪几个方面? 为什么说操作系统实现了对计算机资源的抽象? 试说明推动多道批处理系统形成和发展的主要动力是什么。 何…

    Linux 2023年6月6日
    079
  • Linux系统僵尸进程详解

    大安好,我是良许。 本文我们将来讨论一下什么是僵尸进程,僵尸进程是怎么产生的,如何杀死一个僵尸进程。 Linux中的进程是什么? 讲到进程,我们要先了解一下另一个概念: &…

    Linux 2023年6月14日
    0147
  • bash 教程-5 shell 流程控制 条件判断 重定向 read [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com 流程控制 if commands; then commands [elif…

    Linux 2023年5月28日
    0119
  • JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践

    企业数据越存越多,存储容量与查询性能、以及存储成本之间的矛盾对于技术团队来说是个普遍难题。这个难题在 Elasticsearch 与 ClickHouse 这两个场景中尤为突出,为…

    Linux 2023年6月14日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球