当前位置: 首页 > news >正文

QQ邮箱发送验证码(Springboot)

一、邮箱发送服务准备

在qq邮箱的设置中选择账号下开启服务。

开启时可能会有短信验证,开启后显示验证码之类的一串英文,复制保存起来,在配置文件中会使用到。

二、后端依赖及配置

依赖

在pom.yml文件中添加相关依赖,redis的相关依赖需要根据项目的版本进行选择相符的(下面依赖的项目版本为2.7.6

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail  邮箱依赖--><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><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.5</version></dependency>

配置文件

  #发送邮箱验证码mail:#发送者邮箱username: **********@qq.com(自己的邮箱)#申请到的授权码password: *******(开启服务时的英文)# 配置 SMTP 服务器地址host: smtp.qq.com#端口号465或587port: 465protocol: smtps# 默认的邮件编码为UTF-8default-encoding: UTF-8# 配置SSL 加密工厂properties:mail:smtp:socketFactoryClass: javax.net.ssl.SSLSocketFactory#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误debug: truessl: true

三、实现步骤

邮箱工具类

/*** 邮箱工具类* @author zero* @date 2025-06-05 17:26*/
@Component
public class MailUtils {@Resourceprivate JavaMailSenderImpl mailSender;@Resourceprivate RedisTemplate<String, String> redisTemplate;@Value("${spring.mail.username}") String sendEmail;/*** 发送信息* @param email 邮箱* @return 是否发送信息成功*/public boolean sendMail(String email) throws MessagingException {MimeMessage mimeMessage = mailSender.createMimeMessage();//生成随机验证码String code = generateCode(6);MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);//设置一个html邮件信息helper.setText("<p style='color: blue'>欢迎来到错题收集刷题系统!你的验证码为:" + code + "(有效期为一分钟)</p>", true);//设置邮件主题名helper.setSubject("注册验证码----验证码");//发给谁-》邮箱地址helper.setTo(email);//谁发的-》发送人邮箱helper.setFrom(sendEmail);//将邮箱验证码以邮件地址为key存入redis,1分钟过期redisTemplate.opsForValue().set(email, code, Duration.ofMinutes(1));mailSender.send(mimeMessage);return true;}/*** 生成指定长度的验证码* @param length 长度* @return 指定长度的验证码*/public static String generateCode(int length) {return UUID.randomUUID().toString().substring(0, length);}
}

 Controller层

/*** 获取注册验证码** @param email 邮箱* @return 验证码信息*/
@PostMapping("/sendEmail")
public BaseResponse<String> sendMailTest(@RequestParam String email) throws MessagingException {if (email == null) {throw new BusinessException(ErrorCode.PARAMS_EMPTY_ERROR, "邮箱为空");}String code = redisTemplate.opsForValue().get(email);if (!StringUtils.isEmpty(code)) {throw new BusinessException(ErrorCode.PARAMS_ERROR, "email + \":\" + code + \"已存在,还未过期\"");}boolean b = mailUtils.sendMail(email);if (b) {return ResultUtils.success("验证码发送成功!");}throw new BusinessException(ErrorCode.SEND_EMAIL_ERROR, "发送验证码失败!");
}

相关文章:

  • vue和uniapp聊天页面右侧滚动条自动到底部
  • 第六个微信小程序:教师工具集
  • 负载均衡将https请求转发后端http服务报错:The plain HTTP request was sent to HTTPS port
  • [Zynq] Zynq Linux 环境下 AXI UART Lite 使用方法详解(代码示例)
  • opencv如何在仿射变换后保留完整图像内容并自动裁剪
  • OpenCV 图像通道的分离与合并
  • elementUI点击浏览table所选行数据查看文档
  • 解决el-select选择框右侧下拉箭头遮挡文字问题
  • vue2 , el-select 多选树结构,可重名
  • 【请关注】MySQL 碎片整理提升性能
  • 在word中点击zotero Add/Edit Citation没有反应的解决办法
  • 文档处理组件Aspose.Words 25.5全新发布 :六大新功能与性能深度优化
  • 【Android基础回顾】七:内存管理机制
  • Android7 Input(十)View 处理Input事件pipeline
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 7】【高通蓝牙hal-读流程介绍】
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice在线编辑word文件保存数据同时保存文件
  • 第46节:多模态分类(图像+文本)
  • Java在word中指定位置插入图片。
  • 如何在电脑上轻松访问 iPhone 文件
  • LabVIEW自感现象远程实验平台
  • 如何做网站打广告/全国十大跨境电商排名
  • 手机网站设计建设服务/谷歌广告推广怎么做
  • 把网站内的文本保存到txt怎么做/超级外链工具有用吗
  • ASP动态网站开发基础教程与实验指导/营销软文范文
  • 贵阳做网站的/关键词搜索点击软件
  • 做网站用什么插件/绍兴seo公司