介绍

我们使用redis数据库保存临时的邮箱验证码信息

快速开始

1. 导入依赖

<!--mail邮件发送pom支持-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--redis场景启动器-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis 连接池 -->
<!--新版本连接池lettuce-->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

2. 获取授权码

qq邮箱-->设置-->账户-->开启服务(POP3/SMTP服务)

按要求发送短信,即可获取授权码

3. 配置文件

  • username:是你的邮箱,不是用户名
  • password:是授权码,不是密码
  • host:是SMTP服务器,不是IP地址
#****************************mail***************************
spring:mail:# SMTP服务器,这个是QQ邮箱的  其他邮箱请另行百度host: smtp.qq.com# 发送验证码的邮箱username: ***@qq.com# 授权码password: ***# 编码default-encoding: utf-8# 其它参数properties:mail:smtp:# 如果是用 SSL 方式,需要配置如下属性,使用qq邮箱的话需要开启ssl:enable: truerequired: true# 邮件接收时间的限制,单位毫秒timeout: 10000# 连接时间的限制,单位毫秒connectiontimeout: 10000# 邮件发送时间的限制,单位毫秒writetimeout: 10000

4. 编写代码发送邮件

思路:先判断这个邮箱是否在redis已经存在key,防止重复发送

@Resource(name = "redisTemplateDefault")
private StringRedisTemplate stringRedisTemplate;@Resource
private JavaMailSender mailSender;@GetMapping("/sendEmail/{email}")
public String sendEmail(@PathVariable String email) throws UnsupportedEncodingException, AddressException {String key = "msg_"+email;ValueOperations valueOperations = stringRedisTemplate.opsForValue();String already_have = (String) valueOperations.get(key);if(already_have == null){// 随机生成一个6位数字型的字符串String code = "123456";// 邮件对象SimpleMailMessage message = new SimpleMailMessage();message.setSubject("医院小程序邮箱验证码");message.setText("尊敬的用户您好!\n\n感谢您使用XX医院。\n\n尊敬的: "+email+"您的校验验证码为: "+code+",有效期2分钟,请不要把验证码信息泄露给其他人,如非本人请勿操作");message.setTo(email);// 对方看到的发送人message.setFrom(new InternetAddress(MimeUtility.encodeText("医院官方")+"                                                           <2774668116@qq.com>").toString());//发送邮件try {javaMailSender.send(message);valueOperations.set(key,code,5L, TimeUnit.MINUTES);log.info("邮件发送成功");}catch (Exception e){log.error("邮件发送出现异常");log.error("异常信息为"+e.getMessage());log.error("异常堆栈信息为-->");e.printStackTrace();}return code;}else{return already_have;}
}    

5. 接收邮件

6. 数据存储到redis数据库

7. 校验邮箱验证码

思路:先检查redis中是否有key位对应email的键值对,没有代表验证码过期,如果有就判断用户输入的验证码与value是否相同,进而判断验证码是否正确。

public Integer verifyCode(String email, String code) {int result = 1;ValueOperations valueOperations = stringRedisTemplate.opsForValue();String msgKey = "msg_" + email;Object value = valueOperations.get(msgKey);if(value == null){result = -1;}else if(!code.equals(value)) {result = 0;}// 如果验证码正确,则删除从redisif(result == 1){stringRedisTemplate.delete(msgKey);}/*1 验证码正确0 验证码错误-1 验证码过期*/return result;
}

SpringBoot实现邮箱验证码相关推荐

  1. 使用SpringBoot发送邮箱验证码

    使用SpringBoot发送邮箱验证码 一.开启发送验证码邮箱的POP3/SMTP服务 1. 登录发送验证码邮箱 2. 找到设置,开启POP3/SMTP服务 二.导入依赖 三.增加配置 四.编写代码 ...

  2. SpringBoot 发送邮箱验证码(HTML模板)

    在 Java 使用 JavaMailSenderImpl 实现发送 QQ 邮件 中详细的讲述了在普通 Java 项目中如何使用QQ邮箱发送邮件. 在本文中会继续详细的为大家讲解如何在 SpringBo ...

  3. mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能

    1.登录注册思路 这是一个使用spring boot做的一个qq邮箱注册和登录的项目. 没写前端页面,使用postman测试.有截图详细. 1.1.思路 注册:通过输入的邮箱发送验证码,检验前端传来的 ...

  4. SpringBoot实现发送QQ邮箱验证码

    SpringBoot实现发送QQ邮箱验证码 打开qq邮箱官网 点击设置 找到开启服务:POP3/SMTP 然后复制给的密授权码(记住) 导入maven依赖坐标 <!--qq邮箱--> &l ...

  5. SpringBoot实现邮箱发送验证码(QQ,163等同理)

    SpringBoot实现邮箱发送验证码 准备工作(依赖和yml文件的配置) 邮件的发送代码 补充 准备工作(依赖和yml文件的配置) 我们要远程操纵邮箱就需要获得每个邮箱的密钥: 1.先进入你的qq邮 ...

  6. shiro整合springboot,配置mybatis和增加邮箱验证码登录

    目录 config配置 controller层 Mapper(Mybatis配置) pojo Service 工具类 MailUtil 前台页面 配置(application) 相关依赖 config ...

  7. spring boot 实现发送邮箱验证码

    首先设置一下发件人邮箱,以QQ邮箱为例: 找到帐户,开启POP3/SMTP服务 然后会提醒你怎么去实现,验证完后,会给你一个授权码,记住这个授权码,后端spring boot 会用到 下面回到IDEA ...

  8. 手把手教你通过SpringBoot实现邮箱注册码验证

    文章目录 一.前言 二.创建SpringBoot工程项目 2.1 JWT认证 2.2 集成mybatis-plus实现用户的增删改查 2.3 编写Email工具类实现邮件的发送 2.4 验证码邮件发送 ...

  9. SpringBoot实现邮箱注册

    SpringBoot实现邮箱注册 功能说明 在BuaaMap的产品设计中,综合考虑安全性.易用性等,用户需以自己的邮箱为唯一标识注册账户.因此,后端必须支持邮箱发送.验证功能来实现这一需求. 具体来说 ...

最新文章

  1. 转:PHP应用性能优化指南
  2. 检测ARM板的RTC
  3. 第一个Netty应用
  4. c语言中-(间接成员运算符)的含义
  5. Linux内核分析——Linux内核学习总结
  6. Java多线程编程核心技术 (pdf完整版)
  7. y = mapminmax(‘apply‘,x,ps)中各个参数是什么意思呢?
  8. img里的align属性能保证图文的混排效果以及vspace和hspace
  9. SphereEx CEO 张亮:数据库上云是大势所趋|初心·问
  10. matlab cftool光滑曲线导出为什么就不光滑了_博学 MATLAB如何导出精美的论文插图...
  11. python代码写父亲节快乐图片_巧用代码制作动态图文图【父亲节】
  12. win10 suse linux,Windows 10现已支持安装SUSE Linux子系统 附安装教程|蓝点网
  13. 如何使用百度baidu对某个特定网站进行站内搜索/检索
  14. Android源码编译及替换成自己编译的linux内核
  15. Wayland是什么
  16. 北京邮电/北京航空航天大学上机题目
  17. 【MobaXterm教程】【公网】利用ipv6远程访问服务器
  18. windows环境下cmd切换不同盘目录
  19. 魏小亮:参加编程竞赛对实际工作的用处
  20. vue基于web的化妆品美妆商城电子商务python flask django

热门文章

  1. #科技 #资讯 #生活 RTX 4080显卡在欧跌破建议零售价, 小鹏回应自研电池, Meta因泄漏超5亿用户资料被罚款 ,黑猫投诉开启2022“你我同心 反诈同行”系列活动,这就是今天的其它大新闻
  2. 计算机毕业设计Java游戏资讯网站(源码+系统+mysql数据库+Lw文档)
  3. 基于SSM框架的微信小程序扫码点餐
  4. uniCloud开发公众号:三、生成带参数二维码
  5. vue3和vite安装
  6. vue用input调起手机摄像头录制视频
  7. 【一棵开花的树】 席慕容
  8. 数字人民币即将在“农村”推广和试点
  9. 文本分类在内容安全应用中的数据不平衡问题
  10. SetWindowLong 用法