You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java代码调用Amazon SES V2发送邮件报错求助

问题描述

尝试使用Amazon SES V2发送邮件失败,仅返回无详细异常信息的错误:
software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125)

已参照AWS官方Java SES V2代码示例编写实现,尝试过使用邮箱身份和邮箱ARN身份发送,均无法成功。以下是相关代码及依赖配置:

核心代码

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.amazonaws.services.sns.AmazonSNS;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sesv2.model.Body;
import software.amazon.awssdk.services.sesv2.model.Content;
import software.amazon.awssdk.services.sesv2.model.Destination;
import software.amazon.awssdk.services.sesv2.model.EmailContent;
import software.amazon.awssdk.services.sesv2.model.Message;
import software.amazon.awssdk.services.sesv2.model.SendEmailRequest;
import software.amazon.awssdk.services.sesv2.SesV2Client;

import lombok.extern.slf4j.Slf4j;

@Component
@Slf4j
public class EmailNotificationUtils {

     public Boolean sendSESEmailNotification(String sender, String recipient, String subject) {

        Region region = Region.US_EAST_2;
        SesV2Client sesv2Client = SesV2Client.builder().region(region).build();

        // The HTML body of the email.
        String bodyHTML = "<html>" + "<head></head>" + "<body>" + "<h1>Hello!</h1>" + "<p>                               This is test eamil.</p>"
                + "</body>" + "</html>";

        send(sesv2Client, sender, recipient, subject, bodyHTML);
        return true;
    }

    public static void send(SesV2Client client, String sender, String recipient, String    subject, String bodyHTML) {

        Destination destination = Destination.builder().toAddresses(recipient).build();

        Content content = Content.builder().data(bodyHTML).build();

        Content sub = Content.builder().data(subject).build();

        Body body = Body.builder().html(content).build();

        Message msg = Message.builder().subject(sub).body(body).build();

        EmailContent emailContent = EmailContent.builder().simple(msg).build();

        log.info("sender {}", sender);
        log.info("destination {}", destination);
        log.info("emailContent {}", emailContent);

         SendEmailRequest emailRequest =      SendEmailRequest.builder().destination(destination).content(emailContent)
                .fromEmailAddress(sender).build();

        try {
            log.info("Attempting to send an email through Amazon SES \" + \"using the AWS SDK for Java.. {}",
                    emailRequest.fromEmailAddressIdentityArn());
            client.sendEmail(emailRequest);
            log.info("email was sent");

        } catch (Exception e) {
            log.error("Exception occured while sending message with exception {}", e.getStackTrace());
        }
    }
}

依赖配置

<dependency>
   <groupId>software.amazon.awssdk</groupId>
   <artifactId>bom</artifactId>
   <version>2.17.288</version>
   <type>pom</type>
   <scope>runtime</scope>
</dependency>
<dependency>
   <groupId>software.amazon.awssdk</groupId>
   <artifactId>sesv2</artifactId>
   <version>2.17.288</version>
</dependency>
<dependency>
   <groupId>software.amazon.awssdk</groupId>
   <artifactId>sts</artifactId>
   <version>2.17.288</version>
</dependency>
解决方法
  • 修复异常日志输出:当前catch块仅打印堆栈数组,无法获取具体错误原因。修改catch代码,让日志框架输出完整异常信息:
catch (Exception e) {
    log.error("发送邮件失败", e);
}

通过完整异常信息,可以定位到权限不足、身份未验证、区域不匹配等具体问题。

  • 验证IAM权限:确保执行代码的IAM实体(用户/角色)拥有ses:SendEmail或ses:SendRawEmail权限,策略中需指定对应的SES资源(可使用*或具体身份ARN)。

  • 确认发件人身份状态:

    • 发件人邮箱/域名需在SES控制台完成验证,包括DKIM、SPF配置。
    • 若处于SES沙箱模式,收件人也必须是已验证的邮箱,否则无法发送。
  • 检查客户端初始化:

    • 确认SesV2Client正确加载AWS凭证:本地运行需配置~/.aws/credentials,云环境需关联正确的IAM角色。
    • 确认指定区域US_EAST_2与SES身份所在区域一致,SES身份为区域级资源,跨区域无法调用。
  • 校验请求参数:

    • 使用ARN作为发件人身份时,需调用fromEmailAddressIdentityArn()而非fromEmailAddress()设置参数。
    • 检查收件人邮箱格式是否合法,避免无效地址。
    • 确认邮件内容符合SES规范,无违规内容,HTML格式正确。
  • 升级SDK版本:尝试将AWS SDK版本升级至最新稳定版,排除版本兼容性问题。

内容的提问来源于stack exchange,提问作者Raghuram KK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:29:52