2017-05-26 209 views
1

我使用Laravel 5.3,EC2和SES发送电子邮件。Amazon SES 403 Forbidden SignatureDoesNotMatch使用Laravel 5.3

配置/ mail.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用户并使用新的密钥/秘密。
2)创建root用户密钥/秘密。
3)运行NTPDATE命令。
4)php artisan缓存:清除,配置:清除,查看:清除,转储自动加载
5)我也在.env中使用了sparkpost,并给出了错误403:禁止了。

我仍然看到以下错误:

[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

+0

这可能有一些帮助。 http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html >>您的SMTP用户名和密码与您的AWS访问密钥ID和秘密访问密钥不同。不要尝试使用您的AWS凭证对SMTP端点进行身份验证。 只是想确保你尝试过。 – nightgaunt

+0

是的。这个做完了。我正在使用IAM凭据。请检查SES_KEY和SES_SECRET。这是IAM用户的凭据。 –

+0

你已经提到你运行ntpdate,但不是输出?你确定你没有时钟歪斜吗? ntpstat的输出是什么? – Robo

回答

1

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

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

总之,您没有使用SES SDKSMTP发送电子邮件。所以SES_KEY和SES_SECRET不会。

+0

使用SES SDK .. –