我在我的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"];
}
}
答案 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
这种方法更正确&即使你在任何地区都这样做,也会更合适。