У меня есть база данных с более чем 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 = "[email protected]";
$mail->Password = "myPassW0rd";
$mail->SetFrom('[email protected]', 'Name');
$mail->AddReplyTo("[email protected]", "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();
}
}
Пожалуйста, кто-нибудь может дать мне советы о том, как сделать этот процесс более эффективным, быстрым или лучшим вариантом для достижения этой цели? Благодарю.
Вы можете рассмотреть возможность использования swiftmailer (ссылка ниже), так как он содержит практически все, что вам нужно, и используется во многих продуктах и инфраструктурах, поэтому вы можете быть уверены, что он достаточно стабилен.
https://swiftmailer.symfony.com/docs/sending.html#sending-emails-in-batch
И вы можете отправлять только 500 писем / в день при 20 письмах / в час
Увидеть: https://support.google.com/a/answer/2956491#sendinglimitsforrelay
Просто разделите их запятыми, как
$email_to = "[email protected], [email protected], John Doe <[email protected]>"
Для более подробной информации проверьте эту ссылку: — PHP отправлять почту на несколько адресов электронной почты