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