Что такое эффективный способ отправки электронной почты многим пользователям на PHP

У меня есть база данных с более чем 12 000 пользователей, и я пытаюсь отправить электронное письмо всем им, каждый из которых содержит конкретную информацию, основанную на их информации в базе данных. Я сделал это электронное письмо для отправки, когда cron запускается по воскресеньям к 6 утра, и я завершил функцию в прошлую пятницу, и она работала в воскресенье, то есть вчера. Вот что случилось.

1.) Письмо продолжало отправляться весь день с 6 утра до 7 вечера

2.) К тому времени его отправили только 750 пользователям

3.) После этого он полностью остановился по причинам, которые я не знаю

PS:I am sending the emails using PHPMailerс шаблоном, и я использую цикл, чтобы зациклить всех пользователей и выполнить расчеты для каждого пользователя, заполните шаблон информацией, а затем отправьте электронное письмо.

Ниже приведен фрагмент кода, показывающий, что я делаю...

foreach($users as $user){
            // Construct the email template
            $htmlContent = file_get_contents(__DIR__ . '/../../templates/weekly_spending_template.html');

            // Replace some place holders with user's custom information.
            $htmlContent = preg_replace('/\$bars/', $bars, $htmlContent);
            $htmlContent = preg_replace('/\$labels/', $labels, $htmlContent);
            $htmlContent = preg_replace('/\$total/', $currency . ' ' . number_format($total, 0), $htmlContent);
            $htmlContent = preg_replace('/\$budget/', $currency . ' ' . number_format($budget, 0), $htmlContent);
            $htmlContent = preg_replace('/\$first_name/', ucfirst($user->first_name), $htmlContent);
            $htmlContent = preg_replace('/\$remark/', $remark, $htmlContent);
            $htmlContent = preg_replace('/\$percentage_difference/', $percentage_difference, $htmlContent);
            $htmlContent = preg_replace('/\$others/', $others, $htmlContent);


            try {
                // Setup email parameters
                $mail = new PHPMailer(true);
                $subject = "Your weekly spending breakdown";


                $mail->IsSMTP();
                $mail->SMTPDebug = 0;
                $mail->SMTPAuth = true;
                $mail->SMTPSecure = "ssl";
                $mail->Host = "smtp.gmail.com";
                $mail->Port = 465;
                $mail->AddAddress($user->email, ucfirst($user->first_name) . ' ' . ucfirst($user->last_name));
                $mail->Username = "mymail@example.com";
                $mail->Password = "myPassW0rd";
                $mail->SetFrom('mymail@example.com', 'Name');
                $mail->AddReplyTo("mymail@example.com", "Name");
                $mail->Subject = $subject;
                $mail->Body = $htmlContent;
                $mail->isHTML(true);

                if (!$mail->send()) {
                    echo "Message was not sent.\n";
                    echo 'Mailer error: ' . $mail->ErrorInfo . "\n";
                } else {
                    echo "Message has been sent.\n";
                }
            } catch (\Exception $ex) {
                echo $ex->getMessage();
            }
}

Пожалуйста, кто-нибудь может дать мне советы о том, как сделать этот процесс более эффективным, быстрым или лучшим вариантом для достижения этой цели? Благодарю.

2 ответа

Вы можете рассмотреть возможность использования swiftmailer (ссылка ниже), так как он содержит в основном все, что вы хотите, и используется во многих продуктах и ​​инфраструктурах, поэтому вы можете быть уверены, что он достаточно стабилен.

https://swiftmailer.symfony.com/docs/sending.html

И вы можете отправлять только 500 писем / в день при 20 письмах / в час

См.: https://support.google.com/a/answer/2956491.

Просто разделите их запятыми, как

$email_to = "youremailaddress@yourdomain.com, emailtwo@yourdomain.com, John Doe <emailthree@example.com>"

Для более подробной информации проверьте эту ссылку: - PHP отправлять почту на несколько адресов электронной почты

Другие вопросы по тегам