2014-05-15 31 views
0

我正在整合亚马逊SES SDK在我的iOS应用程序。我最近观察到,我无法从验证的电子邮件地址发送邮件。如果我切换到US_WEST_2区域。问题似乎与iOS SDK有关,因为我可以使用相同的邮件地址从亚马逊控制台发送邮件。亚马逊SES:无法发送邮件验证电子邮件地址,如果地区变更

错误消息: exception = {SESMessageRejectedException {RequestId:70ed2e9e-dc16-11e3-89ca-956987a01a60,ErrorCode:MessageRejected,消息:电子邮件地址未验证。 }},错误码= 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"]; 

    } 
} 
+0

您可以分享代码片段来实例化SES客户端并发送电子邮件,以便重新处理该问题吗? –

+0

您好Yosuke,请检查代码片段。根据指南,我已经验证了US_WEST_2地区的新电子邮件地址,但我无法使用该电子邮件地址使用我的应用发送邮件。但是,如果我尝试使用相同的电子邮件地址从亚马逊控制台发送邮件,它工作正常。 – niks

回答

0

这听起来像你看到的是由设计。

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

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

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

+0

谢谢迈克尔。我已经验证了US_WEST_2地区的新电子邮件地址,但仍然无法使用iOS SDK发送包含该地址的邮件。我可以通过选择US_WEST_2地区并使用针对该地区验证的相同电子邮件地址,从亚马逊控制台发送邮件。 – niks

+0

我可能误解了你的问题。曾经有一次,SES只有一个地区,us-east-1。您的SDK版本是最新的,还是有可能只包含一个可能区域的隐含假设?我假设你有这个控制权,但这是我唯一剩下的猜测。 –

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

当你传递一个无效区域,它会默认为美国东1区。这就是你获得例外的原因。

希望这有助于

+0

谢谢洋介。抱歉回复晚了。我也尝试过使用US_WEST_2选项,但它不起作用。此外,我尝试了通过改变区域(US_WEST_2)在亚马逊提供的SES示例代码中,它也不适用于示例代码。您能否通过更改示例代码中的区域来尝试一次。 https://github.com/awslabs/aws-sdk-ios-samples/tree/master/SES_FeedbackForm – niks

+0

示例应用程序适用于我。分配'[AmazonEndpoints sesEndpoint:US_WEST_2]'后,'ses.endpoint'的值是多少? –

+0

ses.endpoint给https://email.us-west-2.amazonaws.com。 – niks

相关问题