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