Я пытаюсь настроить очередь электронной почты через Amazon SES, чтобы убедиться, что я могу отправлять несколько писем одновременно (ограничено до 14 писем в секунду).
Я постоянно получаю знак ошибки
Письмо не было отправлено. Сообщение об ошибке: Ошибка выполнения «SendEmail» вкл.https://email.us-west-2.amazonaws.com«; Ошибка HTTP AWS: ошибка клиента:
POST https://email.us-west-2.amazonaws.com
привело к403 Forbidden
ответ: Sender SignatureDo (усеченный …) SignatureDoesNotMatch (клиент): рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой секретный ключ доступа AWS и метод подписи. Обратитесь к сервисной документации для деталей. Канонической строкой для этого запроса должно было быть ‘POST / aws-sdk-invocation-id: 4d2929e4b7ca73cfe9370d1b848d398d aws-sdk-retry: 0/0 хост: email.us-west-2.amazonaws.com x-amz-date: 20170311T031541Z aws-sdk-invocation-id; aws-sdk-retry; хост; x-amz-date 486b4c1288d7c5717c3a0bccdaf10f67eb02ca5da8fbfed75298e98e8f785048 ‘Строка для подписи должна быть’ AWS4-H / 2013-RU / 201 / SH3 / 2013-RU / 201-SH3 / 201 / SH3 / 201-RU3 ce02f756d98ab45ab63754fd6ec64a6621c36ed802316ff22c2c877535925735 ‘- подпись отправителяDoesNotMatch Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой секретный ключ доступа AWS и метод подписи. Обратитесь к сервисной документации для деталей. Канонической строкой для этого запроса должно было быть ‘POST / aws-sdk-invocation-id: 4d2929e4b7ca73cfe9370d1b848d398d aws-sdk-retry: 0/0 хост: email.us-west-2.amazonaws.com x-amz-date: 20170311T031541Z aws-sdk-invocation-id; aws-sdk-retry; хост; x-amz-date 486b4c1288d7c5717c3a0bccdaf10f67eb02ca5da8fbfed75298e98e8f785048 ‘Строка для подписи должна быть’ AWS4-H / 2013-RU / 201 / SH3 / 2013-RU / 201-SH3 / 201 / SH3 / 201-RU3 ce02f756d98ab45ab63754fd6ec64a6621c36ed802316ff22c2c877535925735 ‘028b5fb9-0609-11e7-9549-6d5ec2e3cc18
и я попробовал другие решения на stackoverflow без успеха.
Код PHP:
ini_set('display_errors', 'On');
error_reporting(E_ALL);
// aws.amazon.com/code/
// docs.aws.amazon.com/ses/latest/DeveloperGuide/send-using-sdk-php.html
// Replace path_to_sdk_inclusion with the path to the SDK as described in
// docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html
define('REQUIRED_FILE','aws/aws-autoloader.php');
// Replace [email protected] with your "From" address.
// This address must be verified with Amazon SES.
define('SENDER', '[email protected]');
// Replace [email protected] with a "To" address. If your account
// is still in the sandbox, this address must be verified.
define('RECIPIENT', '[email protected]');
// Replace us-west-2 with the AWS region you're using for Amazon SES.
define('REGION','us-west-2');
define('SUBJECT','Amazon SES test (AWS SDK for PHP)');
define('BODY','This email was sent with Amazon SES using the AWS SDK for PHP.');require REQUIRED_FILE;
use Aws\Ses\SesClient;
$client = SesClient::factory(array(
'version'=> 'latest',
'region' => REGION,
'credentials' => array(
'key' => 'xxxx',
'secret' => 'xxxx',
)
));
$request = array();
$request['Source'] = SENDER;
$request['Destination']['ToAddresses'] = array(RECIPIENT);
$request['Message']['Subject']['Data'] = SUBJECT;
$request['Message']['Body']['Text']['Data'] = BODY;
try {
$result = $client->sendEmail($request);
$messageId = $result->get('MessageId');
echo("Email sent! Message ID: $messageId"."\n");
} catch (Exception $e) {
echo("The email was not sent. Error message: ");
echo($e->getMessage()."\n");
}
Ты сделаешь мой день, если сможешь помочь.
Библиотека отправки AWS SES BULK
Монтаж
Шаг 1.
Create Composer.json
{
"require": {
"aws/aws-sdk-php": "3.*"}
}
Шаг 2.
composer install
Этот код будет работать для индивидуальной отправки с использованием SES AWS SDK версии 3. Надеюсь, что это сработает. Для отправки multiple emails via AWS SES
Используйте эту библиотеку AWS SES BULK E-mail ОТПРАВКА
<?php
$sesClient = Aws\Ses\SesClient::factory(array(
'credentials' => array(
'key' => $accessKey,
'secret' => $secretKey,
),
"region" => "us-east-1",
"version" => "2010-12-01"));
$mail = new PHPMailer_PHPMailer();
$mail->CharSet = "UTF-8";
$mail->AddAddress($receiverEmail);
$mail->setFrom($senderEmail, $senderName);
$mail->Subject = $subject;
$mail->preSend();
$mime = $mail->getSentMIMEMessage();
try
{
$response = $sesClient->sendRawEmail(array("RawMessage" => array("Data" => $mime)));
$MessageId = $response->get("MessageId");
$metaData = $response->get("@metadata");
if (!empty($MessageId))
{
$sent[]=$MessageId;
$sent[]=$metaData["headers"]['x-amzn-requestid'];
}
} catch (Exception $ex)
{
echo $response = $ex->getMessage();
$xmlResponse = explode('<Code>', $response);
$parsedResponse = explode('</Code>', $xmlResponse[2]);
$failed[]=$parsedResponse[0];
}
Других решений пока нет …