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

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, "发送验证码失败!");
}

http://www.xdnf.cn/news/12071.html

相关文章:

  • AI系统负载均衡与动态路由
  • 力扣HOT100之二分查找: 34. 在排序数组中查找元素的第一个和最后一个位置
  • 数学建模-嘉陵江铊污染事件解题全过程文档及程序
  • 联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
  • matlab实现DBR激光器计算
  • 全维度测试通过!DolphinScheduler 3.2.0单节点部署与验证实录
  • cursor-free-vip使用
  • [实际项目2] 从西门子PLC中读取曲线数值并绘图
  • 半监督学习:低密度分离假设 (Low-Density Separation Assumption)
  • IT组织转型记:从运维支持到数字利润中心的蜕变
  • OpenCV CUDA模块图像处理-----对图像执行 均值漂移过程(Mean Shift Procedure)函数meanShiftProc()
  • opencv学习笔记1:图像基础、图像操作、直方图均衡化详解
  • 破局新能源消纳难题!安科瑞智慧能源平台助力10KV配电网重构未来
  • Python数据可视化科技图表绘制系列教程(三)
  • AtCoder-abc408_b 解析
  • React hook之userReducer
  • vue-19(Vuex异步操作和变更)
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 7】【高通蓝牙hal-读流程介绍】
  • 古老界面硬核工具:小兵以太网测试仪(可肆意组包,打vlan)
  • 重启路由器ip不变怎么回事?原因分析与解决方法
  • Java八股文——集合「List篇」
  • 【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机
  • npm install 报错:npm error: ...node_modules\deasync npm error command failed
  • linux 安装mysql8.0;支持国产麒麟,统信uos系统
  • SpringCloud——Nacos
  • SpringBoot自动化部署全攻略:CI/CD高效实践与避坑指南
  • 桂花网蓝牙网关物联网医院动态血糖管理应用案例
  • 金融系统功能测试:科技赋能,安全护航
  • 【赵渝强老师】Docker的图形化管理工具
  • 26考研 | 王道 | 计算机组成原理 | 四、指令系统