Laravel 的 AWS SES 403 权限错误

AWS SES 403 permissions error with Laravel

在我的本地机器上,邮件是按照 SES 官方文档的建议设置的,并且非常有效。该应用程序在我的 EC2 部署上也完全相同。除了邮件部分。每当我在生产应用程序上发送电子邮件时,都会收到以下错误:

错误 1/2

ClientException in RequestException.php line 107:
Client error: `POST https://email.eu-west-1.amazonaws.com` resulted in a `403 Forbidden` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>InvalidClie (truncated...)

和 2/2

SesException in WrappedHttpHandler.php line 192:
Error executing "SendRawEmail" on "https://email.eu-west-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.eu-west-1.amazonaws.com` resulted in a `403 Forbidden` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>InvalidClie (truncated...)
InvalidClientTokenId (client): The security token included in the request is invalid. - <ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>InvalidClientTokenId</Code>
<Message>The security token included in the request is invalid.</Message>
</Error>
<RequestId>0a137c9c-5fd9-11e6-a886-973129052803</RequestId>
</ErrorResponse>

用于我的生产的 .env 文件是使用链接到我的 EC2 的数据库设置的。它适用于应用程序的所有其他方面。 Composer 随所有依赖项更新而更新。我使用 SMTP 通过 SES 将邮件发送到经过验证的域。我的 EC2 上的 IAM 角色是创建 Amazon Linux AMI 时创建的默认 EC2 角色。还有一个 SES 角色。安全组允许所有 TCP 出站流量。

好的,解决了。我放入 services.php 的根访问密钥未激活。我创建了一个新的根密钥文件,替换了 services.php 中的密钥,它解决了问题。

我也遇到了这个问题,耗费了我几个小时的时间。解决方法很简单。不要使用 SMTP 凭据作为您的用户名和密码。相反,转到 IAM,创建一个新用户并添加 SES 权限。然后重试!!!

我的更可笑。我正在使用 VitualBox 并且它的时钟关闭了几分钟(我的笔记本电脑之前在某个时候进入睡眠状态)并且导致签名不匹配。重启虚拟机就搞定了。

我在 Laravel 8 遇到了这个问题并尝试了所有方法。事实证明,引用 .env 值会导致问题。从值中删除双引号解决了我的问题。

不好

MY_SECRET="secret_aws_key_420"

MY_SECRET=secret_aws_key_420

这很奇怪,因为引入引号是为了确保不会发生此类编码问题。

参考包版本:

  1. PHP 8
  2. Laravel 8
  3. aws/aws-sdk-php 3.168