实现邮箱发送验证码功能

实现邮箱发送验证码功能

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

邮箱验证步骤

本文使用了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/685915/

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

(0)

大家都在看

  • JAVA获取jvm和操作系统相关信息

    JAVA获取jvm和操作系统相关信息 背景 今日搬砖🧱时需要获取系统运行时间、版本号等相关信息,使用Java自带的类进行获取系统运行的相关信息,在这整理记录分享一下,感兴趣的小伙伴…

    技术杂谈 2023年6月21日
    099
  • 优秀程序猿因何而优秀?

    这些年我曾和非常多程序猿一起工作。他们之中的一些人非常厉害。而还有一些人显得平凡。不久前由于和一些技术非常熟练的程序猿工作感觉非常愉快,我花了一些时间在考虑我佩服他们什么呢?什么原…

    技术杂谈 2023年5月31日
    087
  • 深入浅出SpringSecurity

    SpringSecurity学习 SpringSecurity简介 安全框架的概述 什么是安全框架?是为了解决安全问题的框架。如果没有安全框架,我们需要手动处理每个资源的访问控制,…

    技术杂谈 2023年7月11日
    069
  • python-数据描述与分析(1)

    数据描述与分析 在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进…

    技术杂谈 2023年7月25日
    0104
  • 有意义的学习,都要先回答三个问题

    我们都知道, 在现代经济中, 我们不能停止学习。但如何保持自我教育是一个复杂的问题。 获得一个正式学位,比如 MBA 或博士学位, 是否值得? 你是否应该采取更有针对性的方法, 参…

    技术杂谈 2023年5月31日
    090
  • 互联网行业的常用黑话,你知道几条?

    往期推荐 身为一名新时代的互联网工作人员,怎么能对这个行业的黑话一无所知呢?下面我给大家整理了互联网行业的基本”黑话”,看看你知道几条。 一、互联网人知名大…

    技术杂谈 2023年5月31日
    0106
  • Android中的Coroutine协程原理详解

    前言 协程是一个并发方案。也是一种思想。 传统意义上的协程是单线程的,面对io密集型任务他的内存消耗更少,进而效率高。但是面对计算密集型的任务不如多线程并行运算效率高。 不同的语言…

    技术杂谈 2023年7月10日
    083
  • 从URL到页面显示

    从URL到页面显示 1.解析 URL 浏览器第一步要做的就是解析 URL,从而生成发送给 Web 服务器的请求信息。 URL 元素组成 http: + // Web服务器 + [/…

    技术杂谈 2023年7月25日
    068
  • 实战篇:Security+JWT组合拳 | 附源码

    Good morning, everyone! 之前我们已经说过用Shiro和JWT来实现身份认证和用户授权,今天我们再来说一下 Security和JWT的组合拳。 简介 先赘述一…

    技术杂谈 2023年7月11日
    082
  • 浏览器端用JS实现创建和下载图片

    问题场景 在前端很多的项目中,文件下载的需求很常见。尤其是通过JS生成文件内容,然后通过浏览器端执行下载的操作。如 图片, Execl 等的导出功能。日前,项目中就遇到了这类需求,…

    技术杂谈 2023年5月31日
    0104
  • Maven学习笔记,动力节点maven教程随堂笔记

    *这篇笔记的学习视频来自b站动力节点 第一部分 1.分析项目要做什么,知道项目有哪些组成部分。2.设计项目,通过哪些步骤,使用哪些技术。需要多少人, 多长的时间。3.组建团队,招人…

    技术杂谈 2023年7月24日
    075
  • 云筑集采研发团队的Scrum敏捷实践总结

    Edison作为团队内部敏捷教练,这是我正式辅导的第一个Scrum Master童鞋(花名:大师兄;)的敏捷迭代实践总结,在互联网公司做敏捷转型, 难而正确! Scrum 是用于开…

    技术杂谈 2023年5月31日
    093
  • adbr()的bug

    ; ; 无法使用: cal(0.3,adbr(a),adbr(b)) posted @2022-11-02 14:08 树叶本子 阅读(6 ) 评论() 编辑 Original: …

    技术杂谈 2023年7月24日
    081
  • python工具—snmp流量监控,自定义粒度,业务突发可视化

    个人博客地址 现在主流监控软件和云平台提供的流量监控,监控粒度最小只能设置为1分钟,无法准确定位故障,特别是瞬时突发较大的业务 对比python的snmp库还是更喜欢用subpro…

    技术杂谈 2023年7月25日
    065
  • SpringSecurity

    SpringSecurity 11.1 SpringSecurity简介 Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spr…

    技术杂谈 2023年6月21日
    0106
  • nginx配置文件讲解及示例(可复制)

    【示例一】 运行用户 user www-data; 启动进程,通常设置成和cpu的数量相等 worker_processes 1; 全局错误日志及PID文件 error_log /…

    技术杂谈 2023年7月11日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球