Нет ответа от AWS SES, когда я пытаюсь отправить электронное письмо - PullRequest
0 голосов
/ 06 ноября 2018

У меня недавно возникла проблема с моими электронными письмами, неделю назад у меня начались ошибки при отправке электронной почты, проблема в том, что иногда, когда я вызываю эту функцию sendEmail, она никогда не возвращает Aws/Result или любой Exception. Так что мой сценарий зациклен, ждал этого. Вопрос носит спорадический характер. Я предполагаю, что мой запрос не может быть добавлен в очередь AWS, но я получу исключение, по крайней мере.

Я попытался найти настройку тайм-аута, которую я мог установить, чтобы не ждать вечно, но я не смог найти ее в документации. Я пользуюсь этим сервисом 2 года и до сих пор не получаю сообщение об ошибке.

Кто-нибудь еще сталкивался с этой проблемой?

Где можно установить тайм-аут для этих вызовов, связанных с классом SES?

Простой код:

use Aws\Ses\SesClient;
use Aws\Ses\Exception\SesException;

// Replace sender@example.com with your "From" address.
// This address must be verified with Amazon SES.
define('SENDER', 'sender@example');

// Replace recipient@example.com with a "To" address. If your account
// is still in the sandbox, this address must be verified.
define('RECIPIENT', 'recipient@example.com');

define('SUBJECT', 'Amazon SES test (AWS SDK for PHP)');

define('HTMLBODY', '<h1>AWS Amazon Simple Email Service Test Email</h1>' .
    '<p>This email was sent with <a href="https://aws.amazon.com/ses/">' .
    'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">' .
    'AWS SDK for PHP</a>.</p>');
define('TEXTBODY', 'This email was send with Amazon SES using the AWS SDK for PHP.');

define('CHARSET', 'UTF-8');

$_AWSAPICredentials = array(
    'key' => 'AWSAPIKEY',
    'secret' => 'AWSAPISECRET',
);
$_AWSAPIVersion = 'latest';
$_AWSAPIRegion = 'us-west-2';

$_SES = new SesClient([
    'version' => $_AWSAPIVersion,
    'region' => $_AWSAPIRegion,
    'credentials' => $_AWSAPICredentials,
]);

$params = [
    'Destination' => [
        'ToAddresses' => [
            RECIPIENT,
        ],
    ],
    'Message' => [
        'Body' => [
            'Html' => [
                'Charset' => CHARSET,
                'Data' => HTMLBODY,
            ],
            'Text' => [
                'Charset' => CHARSET,
                'Data' => TEXTBODY,
            ],
        ],
        'Subject' => [
            'Charset' => CHARSET,
            'Data' => SUBJECT,
        ],
    ],
    'Source' => SENDER
];

try {
    $result = $_SES->sendEmail($params);
    $sMessageId = $result->get('MessageId');
} catch (SesException  $e) {
    print_r($e->getAwsErrorMessage());
}

Примечание. Я использую AWS SDK PHP версии 3.67.20

.

Когда это не удается, я получаю эту ошибку

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): Signature expired: 20181107T003842Z is now earlier than 20181107T005054Z (20181107T005554Z - 5 min.) - <ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>SignatureDoesNotMatch</Code>
    <Message>Signature expired: 20181107T003842Z is now earlier than 20181107T005054Z (20181107T005554Z - 5 min.)</Message>
  </Error>
  <RequestId>xxxxxxx-xxxx-xxxx-xxxx-13bf5130fec1</RequestId>
</ErrorResponse>

1 Ответ

0 голосов
/ 08 ноября 2018

Ну, я нашел решение .... Я синхронизировал время NTP на своем сервере, и теперь он работает. Я дал ссылку для Ubuntu SO, что я следовал https://www.tecklyfe.com/fix-ubuntu-timedatectl-ntp-sync-no/

Возможно, часы моей машины были хотя бы достаточно синхронизированы, чтобы эта ошибка не появлялась каждый раз.

...