在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.效果如图

相关推荐
程序员小假2 小时前
我们来说一下 MySQL 的慢查询日志
java·后端
独自破碎E3 小时前
Java是怎么实现跨平台的?
java·开发语言
To Be Clean Coder3 小时前
【Spring源码】从源码倒看Spring用法(二)
java·后端·spring
xdpcxq10293 小时前
风控场景下超高并发频次计算服务
java·服务器·网络
想用offer打牌3 小时前
你真的懂Thread.currentThread().interrupt()吗?
java·后端·架构
橘色的狸花猫3 小时前
简历与岗位要求相似度分析系统
java·nlp
独自破碎E3 小时前
Leetcode1438绝对值不超过限制的最长连续子数组
java·开发语言·算法
用户91743965393 小时前
Elasticsearch Percolate Query使用优化案例-从2000到500ms
java·大数据·elasticsearch
计算机毕设VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue小区人脸识别门禁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
yaoxin5211234 小时前
279. Java Stream API - Stream 拼接的两种方式:concat() vs flatMap()
java·开发语言