AWS SES PHP SDK 请求需要来自经过验证的域?

Posted

技术标签:

【中文标题】AWS SES PHP SDK 请求需要来自经过验证的域?【英文标题】:AWS SES PHP SDK requests need to come from verified domain? 【发布时间】:2014-03-28 16:43:51 【问题描述】:

使用Amazon SDK 尝试从我们的系统发送电子邮件。

我遵循的步骤:

创建了 AWS 账户,验证了 mydomainname.co.uk 并验证了 2 个电子邮件地址。 me@personal.co.uk 和 me@mydomainname.co.uk

然后我设置 SMTP 凭据并使用 API 密钥和密钥作为我的访问凭据来创建客户端

    $sesClient = SesClient::factory(array(
        'key'    => 'AKIAIXXXXXXXXXXX5LGQ',
        'secret' => 'AqNL4XXXXXXXXXXXCaBxDMWjzcY4zGbN8tR2S',
        'region' => 'us-west-2',

    ));


    var_dump($sesClient->getSendQuota());

只要我运行任何与 API 交互的东西,我就会得到以下异常

The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

澄清一下:

我已在 AWS Web 界面上成功发送了测试电子邮件 我已经尝试过许多不同的用户 我也尝试过使用 SMTP 用户/密码,但得到的响应是我的凭据无效 我已经用我在网上发现的各种库包装器代码进行了尝试,同样的错误 我仍处于测试模式,但这应该没问题,因为我只是尝试从经过验证的电子邮件地址发送到经过验证的电子邮件地址 - 对吗?

我能想到的唯一一件事:我在本地机器上设置了一个测试环境,但它不在我的已验证域上,可能是 AWS 希望我从已验证的域名发送我的请求,以便验证它?

编辑

刚刚尝试在我的生产机器上运行此代码,我得到了同样的错误

也许我需要生产模式?

【问题讨论】:

您是否从 ses 域部分验证了域。 【参考方案1】:

您收到的异常意味着您的凭据(keysecret)不正确。尝试向其他服务(例如$s3Client->listBuckets())发送请求以仔细检查,然后登录您的帐户并获取正确的服务。如果仍有问题,请联系 AWS 支持。

【讨论】:

以上是关于AWS SES PHP SDK 请求需要来自经过验证的域?的主要内容,如果未能解决你的问题,请参考以下文章

AWS SES 计划发送电子邮件(节点 SDK)

节点 AWS-SDK SES 电子邮件发送验证失败

Amazon SES 中的特殊字符

无法将我的凭据传递给AWS PHP SDK

即使经过验证,AWS SES 电子邮件也总是会进入垃圾邮件

使用来自 node.js 的 AWS SES 在邮件中上传 .jpg 图像附件