在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位验证码

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

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

java 复制代码
private final SesClient sesClient;

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.发送验证码

java 复制代码
// 发送验证码邮件
    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

java 复制代码
 finally {
            emailService.shutdown();
        }




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

7.效果如图

相关推荐
AI人工智能+电脑小能手5 小时前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
xbgRS5 小时前
java中的线程
java
今天的砖头有点烫手啊5 小时前
接口太慢?Spring Boot 缓存体系 @Cacheable 全链路拆解
spring boot·后端·缓存
ChaHae-In6 小时前
MyBatis入门操作
java·mybatis
xcLeigh6 小时前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
青山木6 小时前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode
疯狂打码的少年6 小时前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
szephyr6 小时前
腾讯云 ADP 智能体的 Skills 版本回滚总是回到旧配置,是缓存没清还是版本管理没开?
java·缓存·腾讯云
云烟成雨TD6 小时前
Micrometer 系列【39】链路追踪:入门案例 | 环境准备
java·云原生·链路追踪
chuan.bai6 小时前
Java RAG 实战(第 3 篇):从交互式聊天到多轮上下文
java·人工智能·macos·ai