【问题标题】:Amazon SES: Unable to send mail for verified email address, if region is changedAmazon SES:如果区域更改,则无法为已验证的电子邮件地址发送邮件
【发布时间】:2014-05-15 12:59:19
【问题描述】:

我正在我的 iOS 应用程序中集成 Amazon SES SDK。我最近观察到,我无法从经过验证的电子邮件地址发送邮件。如果我切换到 US_WEST_2 地区。问题似乎出在 iOS SDK 上,因为我可以使用相同的邮件地址从 Amazon 控制台发送邮件。

错误信息: 异常 = {SESMessageRejectedException { RequestId:70ed2e9e-dc16-11e3-89ca-956987a01a60,错误代码:消息拒绝,消息:电子邮件地址未验证。 }},errorCode=MessageRejected}

代码: SESManager 类:

    SESSendEmailRequest *ser = [[SESSendEmailRequest alloc] init] ;

    ser.source      = strSenderMailAddress;
    ser.destination = destination;
    ser.message     = message;

    SESSendEmailResponse *response = [[AmazonClientManager ses] sendEmail:ser];

亚马逊客户经理:

+(AmazonSESClient *)ses
{
    [AmazonClientManager validateCredentials];
    return ses;
}

+(void)validateCredentials
{
    if ([AmazonClientManager hasCredentials]) {

            [AmazonClientManager clearCredentials];

            ses = [[AmazonSESClient alloc] initWithAccessKey:[Lockbox stringForKey:kLockboxAmazonAccessKey] withSecretKey:[Lockbox stringForKey:kLockboxAmazonSecretKey]];

 ses.endpoint = [AmazonEndpoints sesEndpoint:@"https://email.us-west-2.amazonaws.com"];

    }
}

【问题讨论】:

  • 您能否分享用于实例化 SES 客户端并发送电子邮件的代码 sn-p 以便我重现该问题?
  • 您好 Yosuke,请检查代码 sn-p。根据指南,我已经验证了 US_WEST_2 地区的新电子邮件地址,但我无法使用我的应用程序使用该电子邮件地址发送邮件。但是,如果我尝试使用相同的电子邮件地址从 Amazon 控制台发送邮件,那就没问题了。

标签: ios amazon-web-services amazon-ses


【解决方案1】:

听起来您所看到的都是设计使然。

区域是独立的系统,就像 AWS 的大部分。

您必须针对要使用的每个区域分别验证每个发件人的电子邮件地址。

——http://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html

【讨论】:

  • 谢谢迈克尔。我已经验证了 US_WEST_2 区域的新电子邮件地址,但我仍然无法使用 iOS SDK 使用该地址发送邮件。我可以通过选择 US_WEST_2 区域并使用为该区域验证的相同电子邮件地址从 Amazon 控制台发送邮件。
  • 我可能误解了你的问题。曾经,SES 只有一个区域,即 us-east-1。您的 SDK 版本是最新的,还是它可能只包含一个可能区域的隐含假设?我假设你已经控制住了,但这是我唯一剩下的猜测。
【解决方案2】:

sesEndpoint: 接受AmazonRegion,其定义如下:

typedef enum
{
    US_EAST_1      = 0,
    US_WEST_1      = 1,
    EU_WEST_1      = 2,
    AP_SOUTHEAST_1 = 3,
    AP_NORTHEAST_1 = 4,
    US_WEST_2      = 5,
    SA_EAST_1      = 6,
    AP_SOUTHEAST_2 = 7
} AmazonRegion;

你需要改变这一行:

ses.endpoint = [AmazonEndpoints sesEndpoint:@"https://email.us-west-2.amazonaws.com"];

到这里:

ses.endpoint = [AmazonEndpoints sesEndpoint:US_WEST_2];

当您传递无效区域时,它将默认为美国东部 1 区域。这就是你得到异常的原因。

希望这会有所帮助,

【讨论】:

  • 谢谢洋介。抱歉回复晚了。我也尝试过使用 US_WEST_2 选项,但它不起作用。此外,我尝试通过更改 Amazon 提供的 SES 示例代码中的区域(US_WEST_2),它在示例代码中也不起作用。您能否通过更改示例代码中的区域来尝试一次。 github.com/awslabs/aws-sdk-ios-samples/tree/master/…
  • 示例应用适合我。分配[AmazonEndpoints sesEndpoint:US_WEST_2]ses.endpoint的值是多少?
【解决方案3】:

我建议您不要验证电子邮件,而是查看以下问题,您可以使其更加基于生产。

How can i send mail without verifying the recipients in amazon ses

即使您对任何地区都这样做,这种方法也更正确、更合适。

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2014-07-06
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2018-11-17
    相关资源
    最近更新 更多