У нас есть приложение на основе PHP (работает на экземпляре t2.medium), которое отправляет электронные письма (только для пользователей с поддержкой) через SES, и оба они расположены в одном регионе , Приложение было запущено в начале этого года, и отправка писем работала должным образом в течение нескольких месяцев. Недавно мы перешли на отправку через mailgun (чтобы мы могли получить дополнительную информацию о проблеме, с которой мы столкнулись), но мы не изменили никаких настроек SES. (Примечание: наша учетная запись одобрена для отправки 50 тыс. Писем в час - мы пытаемся отправить несколько сотен.)Amazon AWS: Отправка электронной почты через SES после мучительно медленного
Я написал вспомогательную утилиту для нашего приложения, которая также отправляет электронные письма, и я решил продолжить использовать SES для этого утилита. Ниже приведена упрощенная версия кода. Обратите внимание, что я сохранил расположение этой тестовой программы как можно ближе к реальной полезности, насколько это возможно (и это должно быть очевидно, что утилита делает базы данных вызова и т.д.)
<?php
require_once dirname(__FILE__) . '/PHPMailer-master/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'email-smtp.us-west-2.amazonaws.com';
$mail->SMTPAuth = true;
$mail->Username = 'my_user_name';
$mail->Password = 'my_password';
$mail->SMTPSecure = 'tls';
$mail->From = 'from_sender';
$mail->FromName = 'WebTeam';
$mail->IsHTML(true);
$oldt = microtime(true);
while(true) {
$first_name = 'first_name';
$email = 'to_recipient';
$strCnt = 'many';
$subject = "Lots of great new things to buy";
$body = "<p>" . $first_name . ",</p>";
$body = $body . "<p>You have ' . $strCnt . ' new things to buy waiting for you. Don't let them slip by! ";
$body = $body . "Click <a href='http://fake_url.com'>here</a> to see them!</p>";
$body = $body . "<p>The Web Team</p>";
$mail->addAddress($email);
$mail->Subject = $subject;
$mail->Body = $body;
$newt = microtime(true);
echo 'email build done: ' . $newt - $oldt . PHP_EOL;
$oldt = $newt;
if(!$mail->send(true)) {
echo 'error sending email: ' . $mail->ErrorInfo . PHP_EOL;
} else {
$newt = microtime(true);
echo 'email sent: ' . $newt - $oldt . PHP_EOL . PHP_EOL;
$oldt = $newt;
}
$mail->ClearAllRecipients(); // added line
}
?>
Довольно просто!
Но, вот втирание. Когда я запускал это в первый раз, первое электронное письмо заняло менее одной секунды для отправки, второе заняло 31 секунду, а третье - 191 секунд. Затем я добавил еще одну строку кода и снова запустил программу. На этот раз первое электронное письмо заняло 63 секунды для отправки. Примерно через 20 минут я запустил программу в третий раз. На этот раз первые три письма были отправлены менее чем за одну секунду, но четвертый занял 191 секунду. Затем я провел его в пятый раз, и первое письмо заняло 135 секунд для отправки. (Обратите внимание, что все электронные письма были получены.)
Что происходит, черт возьми? Что еще более важно, как мне решить проблему?
Это звучит, как вы в настоящее время скорость ограничена. Вы абсолютно уверены, что 'us-west-2' является регионом, в котором вы были одобрены для отправки 50 тыс. Писем в час? –