首页 文章

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

提问于
浏览
0

我正在将iOS SES SDK集成到我的iOS应用程序中 . 我最近发现,我无法从经过验证的电子邮件地址发送邮件 . 如果我切换到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

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

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

    “您必须为要使用的每个区域单独验证每个发件人的电子邮件地址 . ” - http://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html

  • 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区域 . 这就是你得到例外的原因 .

    希望这可以帮助,

  • 0

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

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

    即使您针对任何地区进行此方法,此方法也更为正确且更合适 .

相关问题