Laravel AWS SES - 403 Запрещено - SignatureDoesNotMatch при попытке отправить электронное письмо - PullRequest
0 голосов
/ 09 июля 2019

Я использую драйвер 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.

Любая помощь в том, что вызывает ошибку, очень ценится.

1 Ответ

0 голосов
/ 09 июля 2019

решаемая.

Я должен создать учетные данные IAM из консоли AWS вместо учетных данных SMTP, если я использую драйвер SES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...