Предотвращение последовательной отправки электронной почты в PHPMailer: методы и примеры кода

«Два последовательных электронных письма от PHPMailer» — это проблема, связанная с быстрой отправкой нескольких электронных писем с использованием библиотеки PHPMailer. Это может произойти непреднамеренно из-за ошибок в кодировании или логических недостатков приложения. Чтобы предотвратить эту проблему, вы можете рассмотреть возможность реализации следующих методов:

  1. Внедрите задержку:
    Добавьте задержку между отправкой последовательных электронных писем, чтобы они не отправлялись немедленно. Этого можно добиться с помощью функции sleep()в PHP. Вот пример:
use PHPMailer\PHPMailer\PHPMailer;
// Create a new PHPMailer instance
$mail = new PHPMailer();
// Set your email configuration
// Delay between sending emails
sleep(5); // Sleep for 5 seconds before sending the next email
// Send the email
$mail->send();
  1. Внедрите систему очередей.
    Используйте систему очередей для управления отправкой электронных писем. Вместо того, чтобы отправлять электронные письма напрямую, добавьте их в очередь и создайте отдельный процесс или задание cron, которое будет отправлять электронные письма из очереди с контролируемой скоростью. Этот подход помогает более эффективно управлять процессом отправки электронной почты и позволяет избежать последовательной отправки нескольких электронных писем. Вот упрощенный пример использования очереди базы данных:
use PHPMailer\PHPMailer\PHPMailer;
// Create a new PHPMailer instance
$mail = new PHPMailer();
// Set your email configuration
// Add the email details to the database queue
$queueItem = [
    'to' => 'recipient@example.com',
    'subject' => 'Email subject',
    'message' => 'Email body',
    // Add other necessary fields
];
// Insert the queue item into the database
$db->insert('email_queue', $queueItem);
// Process the email queue separately at a controlled rate
// This can be done using a separate process or a cron job
  1. Внедрите механизм регулирования.
    Используйте механизм регулирования, чтобы ограничить количество электронных писем, отправляемых в течение определенного периода времени. Такой подход гарантирует, что в единицу времени будет отправлено только определенное количество электронных писем. Вот пример:
use PHPMailer\PHPMailer\PHPMailer;
// Create a new PHPMailer instance
$mail = new PHPMailer();
// Set your email configuration
// Throttling configuration
$maxEmailsPerMinute = 10; // Maximum number of emails per minute
// Check the last email sending time
$lastEmailTime = $db->getLastEmailTime();
// Calculate the time difference since the last email
$timeDifference = time() - $lastEmailTime;
// If enough time has passed, send the email
if ($timeDifference >= 60 / $maxEmailsPerMinute) {
    $mail->send();
    $db->updateLastEmailTime(time());
} else {
    // Handle throttling error
}