Amazon SES:如果区域已更改,则无法发送经过验证的电子邮件地址的邮件

时间:2014-05-15 12:59:19

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

我在我的iOS应用中集成了Amazon SES SDK。我最近发现,我无法通过经过验证的电子邮件地址发送邮件。如果我切换到US_WEST_2区域。问题似乎与iOS SDK有关,因为我能够使用相同的邮件地址从Amazon Console发送邮件。

错误讯息: exception = {SESMessageRejectedException {RequestId:70ed2e9e-dc16-11e3-89ca-956987a01a60,ErrorCode:MessageRejected,消息:未验证电子邮件地址。 },errorCode = MessageRejected}

代码:  SESManager类:

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

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

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

AmazonClientManager:

+(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"];

    }
}

3 个答案:

答案 0 :(得分:0)

听起来你所看到的是设计。

这些区域是独立系统,与AWS的大部分区域一样。

  

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

     

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

答案 1 :(得分:0)

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];

当您传递无效区域时,它将默认为US East 1区域。这就是你获得例外的原因。

希望这有帮助,

答案 2 :(得分:0)

我建议您不要在以下问题上验证电子邮件,而是可以将其设置为基于生产。

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

这种方法更正确&即使你在任何地区都这样做,也会更合适。