我正在使用 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_USERNAME
和 MAIL_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/