2014-05-15 30 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

相關問題