2

我使用以下 java 代码发送用户电子邮件,如果我使用 Regions.US_EAST_1 和相关的身份池 ID,它会按预期工作。

AmazonSimpleEmailServiceAsyncClient client = new AmazonSimpleEmailServiceAsyncClient(new CognitoCachingCredentialsProvider(context, identityPoolId, Regions.AP_SOUTH_1));
client.setRegion(Region.getRegion(Regions.AP_SOUTH_1));
client.sendRawEmailAsync(new SendRawEmailRequest(rawMessage), new AsyncHandler<SendRawEmailRequest, SendRawEmailResult>()
{
    @Override
    public void onError(Exception exception)
    {
        exception.printStackTrace();
    }

    @Override
    public void onSuccess(SendRawEmailRequest request, SendRawEmailResult sendEmailResult)
    {
    }
});

但是在我将区域更改为AP_SOUTH_1后,我也更改了身份池 id,代码停止工作,电子邮件不会发送,我开始看到日志说

com.amazonaws.AmazonServiceException:请求中包含的安全令牌无效。(服务:AmazonSimpleEmailService;状态代码:403;错误代码:InvalidClientTokenId;请求 ID:1168c9c2-a940-4bef-be36-8568787bc130)

为什么 US_EAST_1 有效但 AP_SOUTH_1 无效?如何让区域 AP_SOUTH_1 工作?如何识别并解决此问题?

重要提示:我已在两个地区验证了发件人电子邮件地址。我已授予角色 ses:sendRawEmail 权限。

4

1 回答 1

1

我想发布我 2 天的调查并发现可以帮助他人:

经测试

  • 适用于 Android 的 AWS 开发工具包:

使用最新的adk implementation 'com.amazonaws:aws-android-sdk-ses:2.16.12',生产中只能使用us-east-1,us-west-2,eu-west-1 3个区域成功发送邮件,可惜ap-south-1不在列表中,连SES 控制台页面显示您可以使用更多区域,如果您通过代码执行此操作,您将始终收到 AmazonServiceException 提示The security token included in the request is invalid.

  • 适用于 Java 的 AWS 开发工具包:

使用最新的 adk implementation 'com.amazonaws:aws-java-sdk-ses:1.11.789',用户可以使用 Region ap-source-1 发送原始电子邮件。

于 2020-05-25T12:09:02.180 回答