实现邮箱发送验证码功能

实现邮箱发送验证码功能

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

邮箱验证步骤

本文使用了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;
    }
}

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

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

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

(0)

大家都在看

  • 深入理解linux系统下proc文件系统内容

    内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统。 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/…

    Linux 2022年8月11日
    0182
  • Linux内核调试方法总结

    Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() …

    2022年8月24日
    084
  • ubuntu 20.04系统默认配置不支持vim模块

    ubuntu 20.04系统默认配置不支持vim模块,我直接在root登录系统后,执行下列命令进行安装: apt-get install vim 安装好vim后,执行以下进行测试,…

    Linux 2022年8月26日
    0132
  • phpcms安装

    【快速安装开始】 下载解压phpcms,复制安装文件到站点目录”/opt/html”里,给予权限(官网无法访问了,所以下载地址需自行寻找上传) cd /us…

    Linux 2022年10月15日
    0117
  • linux-centos7 安装 jenkins 并 简答配置

    1,安装 2,选择自己的版本,点击进入安装界面 3,依次执行安装界面提供的命令进行安装,可能会有点慢,耐心等待 yum -y install wget wget -O /etc/y…

    Linux 2022年8月20日
    0147
  • Apache Shiro反序列化漏洞(Shiro550)

    1.漏洞原理: Shiro 是 Java 的一个安全框架,执行身份验证、授权、密码、会话管理 shiro默认使用了CookieRememberMeManager,其处理cookie…

    Linux 2022年11月7日
    066
  • 服务器监控-TOP命令详解

    用jmeter进行性能测试的时候,top命令是最方便可用的服务器监控命令,可以看出服务器的当前负载量,CPU占用率,内存占用率等重要信息,下面详细解说一下top命令里面的各个指标。…

    Linux 2022年9月10日
    0162
  • Github——常用命令介绍

    GitHub是在软件开发中常用到的上传下载文件的软件,因为大部分软件都不是一个人能够完成的,而一个团队不可能只在一个电脑上去仅限代码编写,所以这就需要一个服务器来保存代码,团队中的…

    2022年8月30日
    0161
  • Redis主从配置总结

    # grep ‘^[a-Z]’ /usr/local/redis/conf/redis.conf bind 127.0.0.1 192.168.27.115 protected-m…

    Linux 2022年9月14日
    0112
  • 巧用 JuiceFS Sync 命令跨云迁移和同步数据

    近年来,云计算已成为主流,企业从自身利益出发,或是不愿意被单一云服务商锁定,或是业务和数据冗余,或是出于成本优化考虑,会尝试将部分或者全部业务从线下机房迁移到云或者从一个云平台迁移…

    Linux 2022年11月8日
    0103
  • Windows 下日志保存至Linux rsyslog日志服务器

    一、 下载安装 通过https://www.rsyslog.com/windows-agent/windows-agent-download/下载客户端后,按照默认安装完成后即进行…

    Linux 2022年10月12日
    0140
  • 一文入门Qt Quick

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://www.cnblogs.com/englyf/p/16733091.html 初识Qt …

    Linux 2022年10月12日
    0236
  • Linux下配置用msmtp和mutt发邮件

    https://blog.csdn.net/qq_14806125/article/details/50962343 一、安装mutt yum install mutt二、配置mu…

    Linux 2022年8月13日
    0142
  • linux .(点) 命令

    linux .(点) 命令 在linux下,.(点)+(空格)+可执行文件等同于source+(空格)+可执行文件;表示在当前shell环境执行后面的命令或脚本(不加点号默认是新开…

    Linux 2022年8月24日
    0138
  • linux操作-将查到的文件全部删除,可通过此命令

    find ./ -type f -name “._er” | xargs rm -rf xargs(英文全拼: eXtended ARGuments)是给命…

    Linux 2022年8月13日
    084
  • Redis故障案例(一)-特定key批量丢失

    作者:RogerZhuo来源:DBACoder TroubleShooting-排障是DBA一项重要技能,通过故障表现的症状,先让业务高速恢复止损,同一时候分析故障的根因(root…

    Linux 2022年9月14日
    0110
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总