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

在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.lryc.cn/news/2403664.html

相关文章:

  • AndroidR车机TextToSpeech音频焦点异常问题分析
  • ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素
  • 深入理解二叉搜索树:原理到实践
  • 测试W5500的第11步_使用ARP解析IP地址对应的MAC地址
  • 终极数据结构详解:从理论到实践
  • STM32实战: CAN总线数据记录仪设计方案
  • 【k8s】k8s集群搭建
  • 60天python训练计划----day45
  • Python训练营打卡Day46(2025.6.6)
  • C# Wkhtmltopdf HTML转PDF碰到的问题
  • Vue3 (数组push数据报错) 解决Cannot read property ‘push‘ of null报错问题
  • Lifecycle 核心原理面试回答
  • PHP:Web 开发的强大基石与未来展望
  • html文字红色粗体,闪烁渐变动画效果,中英文切换版本
  • 六、【ESP32开发全栈指南:深入解析ESP32 IDF中的WiFi AP模式开发】
  • 基于Django开发的运动商城系统项目
  • Python训练营打卡Day42
  • https相比http的区别
  • 【Linux】为 Git 设置 Commit 提交模板方法,可统一个人或者项目的提交风格
  • caliper config.yaml 文件配置,解释了每个配置项的作用和注意事项
  • 结构体和指针1
  • Python60日基础学习打卡Day45
  • 《Java 并发神器:深入理解CompletableFuture.supplyAsync与线程池实战优化》
  • 【Visual Studio 2022】卸载安装,ASP.NET
  • JVM中的各类引用
  • thinkphp-queue队列随笔
  • STM32标准库-TIM输出比较
  • 科技创新驱动人工智能,计算中心建设加速产业腾飞​
  • figma 和蓝湖 有什么区别
  • SQLServer中的存储过程与事务