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

相关推荐
程序员张318 分钟前
Maven编译和打包插件
java·spring boot·maven
ybq195133454311 小时前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339462 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
灵犀学长2 小时前
EasyExcel之SheetWriteHandler:解锁Excel写入的高阶玩法
spring boot·excel
小毛驴8502 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
zwjapple2 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
DKPT3 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟4 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode5 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社25 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端