amazon-web-services - 使用 Laravel 5.3 的 Amazon SES 403 Forbidden SignatureDoesNotMatch

标签 amazon-web-services laravel-5 amazon-ec2 aws-sdk amazon-ses

我正在使用 Laravel 5.3、EC2 和 SES 发送电子邮件。

配置/邮件.php

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),

.env 有

MAIL_DRIVER=ses
MAIL_HOST=email-smtp.us-west-2.amazonaws.com
MAIL_PORT=25
MAIL_ENCRYPTION=TLS
SES_KEY='AKIA------DZQ5TYQ'
SES_SECRET=AhN8d----------------ZbBq7TNBmhNnosfYbasg6Q
SES_REGION='us-west-2'

Composer .json

"require": {
    "aws/aws-sdk-php": "~3.0", 
}

EC2 托管在孟买,SES 托管在美国西部。我尝试了以下方法:
1) 创建新的 IAM 用户并使用新的 key / secret 。
2) 创建根用户 key / secret 。
3) 运行 NTPDATE 命令。
4) php artisan cache:clear , config:clear, view:clear, dump-autoload
5) 我还在 .env 中使用了 sparkpost,这也给出了错误 403:forbidden。

我仍然看到以下错误:

[2017-05-26 06:02:00] local.ERROR: exception 'Aws\Ses\Exception\SesException' with message 'Error executing "SendRawEmail" on "https://email.us-west-2.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.us-west-2.amazonaws.com` resulted in a `403 Forbidden` response:
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>SignatureDo (truncated...)
 SignatureDoesNotMatch (client): 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.

此处出现完整错误:https://pastebin.com/KSJinB1E

最佳答案

我一开始并不熟悉 Laravel。但是,如果您使用的是 SMTP,则需要指定 MAIL_USERNAMEMAIL_PASSWORD。此外,驱动程序应该是 SMTP 而不是 SES 因为您使用的是 SES 的 SMTP 主机。

文档链接 - http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html应该为您提供生成不同于 AWS IAM 凭证的 SMTP 凭证的方法。

简而言之,您不是使用SES SDK而是使用SMTP来发送电子邮件。所以 SES_KEY 和 SES_SECRET 不行。

关于amazon-web-services - 使用 Laravel 5.3 的 Amazon SES 403 Forbidden SignatureDoesNotMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197224/

相关文章:

amazon-web-services - 使用 Terraform 从 VPC 中的 Lambda 访问 S3

python - Django,Zappa - 运行时错误 : populate() isn't reentrant

php - 如何在 php 中读取 JsonResponse

java - servlet-HTTP 状态 500 内部服务器错误

javascript - 使用 Javascript SDK 在启动时关联 ElasticIP

amazon-web-services - 如何使用 KMS 从 org.apache.hadoop.fs.s3a.S3AFileSystem API 访问 AWS S3

python - 使用分页测试 boto3/botocore

postgresql - Amazon Aurora PostgreSQL 选择进入 OUTFILE S3

laravel - 将多个相同名称转换为一个名称,并且值在laravel中得到总和

php - Laravel 中的@yield、@section