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

在SpringBoot中使用AWS SDK实现邮箱验证码服务

1.依赖导入(maven)

        <dependency><groupId>software.amazon.awssdk</groupId><artifactId>ses</artifactId><version>2.31.46</version></dependency>

2.申请两个key + 发件人邮箱需要验证:

aws.aws_access_key_id
aws_secret_access_key

3.生成随机6位验证码

    // 生成随机验证码(6位数字)public String generateVerificationCode() {return String.format("%06d", new java.util.Random().nextInt(999999));}

4.通过构造函数注入依赖,并绑定两个key和region

public EmailVerificationService(@Value("${cloud.aws.region.static:xx}") String region, @Value("${aws.aws_access_key_id:xx}") String ACCESS_KEY, @Value("${aws_secret_access_key:xx}") String SECRET_KEY) {this.sesClient = SesClient.builder().region(Region.of(region)).credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(ACCESS_KEY, SECRET_KEY))).build();}

5.发送验证码

// 发送验证码邮件public void sendVerificationCode(String recipientEmail) {String verificationCode = generateVerificationCode();// 构建邮件内容String subject = "您的验证码";String htmlBody = "<h3>您的验证码是: " + verificationCode + "</h3>"+ "<p>请在5分钟内使用,此验证码有效期10分钟</p>";try {// 创建邮件请求SendEmailRequest request = SendEmailRequest.builder().source(SENDER_EMAIL).destination(Destination.builder().toAddresses(recipientEmail).build()).message(Message.builder().subject(Content.builder().charset("UTF-8").data(subject).build()).body(Body.builder().html(Content.builder().charset("UTF-8").data(htmlBody).build()).build()).build()).build();// 发送邮件sesClient.sendEmail(request);System.out.println("验证码已发送至: " + recipientEmail);} catch (SesException e) {System.err.println("邮件发送失败: " + e.awsErrorDetails().errorMessage());throw new RuntimeException("邮件发送失败", e);}

6.发完后shutdown

 finally {emailService.shutdown();}// 关闭客户端public void shutdown() {sesClient.close();}

7.效果如图

http://www.dtcms.com/a/234359.html

相关文章:

  • 机器学习与深度学习14-集成学习
  • PostgreSQL17 编译安装+相关问题解决
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • 从0到1写一个适用于Node.js的User Agent生成库
  • Visual Studio 中的 MD、MTD、MDD、MT 选项详解
  • python学习打卡day46
  • 网络安全逆向分析之rust逆向技巧
  • 三模冗余设计
  • 护网行动面试试题(2)
  • 分布式微服务系统架构第144集:FastAPI全栈开发教育系统
  • 在.NET Core控制器中获取AJAX传递的Body参数
  • JavaScript 原型与原型链:深入理解 __proto__ 和 prototype 的由来与关系
  • 如何写高效的Prompt?
  • vscode .husky/pre-commit: line 4: npx: command not found
  • R 语言科研绘图第 55 期 --- 网络图-聚类
  • VUE解决页面请求接口大规模并发的问题(请求队列)
  • 12-Oracle 23ai Vector 使用ONNX模型生成向量嵌入
  • pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
  • DevSecOps新理念
  • 彻底解决 MFC 自绘控件闪烁
  • 短视频矩阵SaaS系统:开源部署与核心功能架构指南
  • C++中switch-case的性能优化策略详解
  • itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程
  • 如何理解OSI七层模型和TCP/IP四层模型?HTTP作为如何保存用户状态?多服务器节点下 Session方案怎么做
  • 学习 React【Plan - June - Week 1】
  • .net 使用MQTT订阅消息
  • AirSim/Cosys-AirSim 游戏开发(三)打包可执行文件
  • AI代码助手需求说明书架构
  • OPenCV CUDA模块光流------高效地执行光流估计的类BroxOpticalFlow
  • day46python打卡