Я использую драйвер SES "aws/aws-sdk-php"
в своем приложении Laravel для отправки электронной почты через AWS SES (Simple Email Service).
Ключ доступа и секрет были сгенерированы из консоли SES> Настройки SMTP> Кнопка Создать мои учетные данные SMTP.
Учетные данные сохраняются в рабочем файле .env
как:
...
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="My Laravel App"
SES_KEY=**********
SES_SECRET=*********
SES_REGION=us-east-1
...
Ранее мы уже тестировали другой набор учетных данных SMTP, созданных из другой учетной записи AWS во время разработки, и он работает без каких-либо проблем. Письма отправляются, как и ожидалось. Это работает даже при использовании ключей в локальной среде.
Однако, когда мы готовимся к производственному серверу под другой учетной записью AWS, учетные данные SMTP, сгенерированные из SES, вообще не работают, и мы получаем следующий ответ 403 Forbidden :
[2019-07-09 16:22:55] production.ERROR: Error executing "SendRawEmail" on "https://email.us-east-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://email.us-east-1.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. - <ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
<Message>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.</Message>
</Error>
<RequestId>123abc123-44d3-aa33-vv33-bb1234gg9g1c</RequestId>
</ErrorResponse>
{"exception":"[object] (Aws\\Ses\\Exception\\SesException(code: 0): Error executing \"SendRawEmail\" on \"https://email.us-east-1.amazonaws.com\"; AWS HTTP error: Client error: `POST https://email.us-east-1.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. - <ErrorResponse xmlns=\"http://ses.amazonaws.com/doc/2010-12-01/\">
<Error>
<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
<Message>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.</Message>
</Error>
<RequestId>123abc123-44d3-aa33-vv33-bb1234gg9g1c</RequestId>
</ErrorResponse>
at /var/www/laravel/myapp/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:191, GuzzleHttp\\Exception\\ClientException(code: 403): Client error: `POST https://email.us-east-1.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...)
Я попытался сгенерировать другую пару ключей доступа, но все равно.
Обратите внимание, что мы успешно проверили наш домен и адрес электронной почты на SES и успешно протестировали отправку электронной почты с подтвержденного адреса электронной почты через консоль SES.
Любая помощь в том, что вызывает ошибку, очень ценится.