$i = 1;
foreach ($recipients as $email => $name) {
$mail->ClearAddresses();
$mail->AddBCC($email, $name);
if (!$mail->send()) {
$send = 0;
} else {
$send = 1;
}
$query = "INSERT INTO `newsletter_send`(`email`, `id_newsletter`, `date`, `send`) VALUES ('$email',$id_newsletter, NOW(),$send) ";
$stmt = $link->prepare($query) or die('error');
$stmt->execute();
$mail->clearAllRecipients();
if (($i % 100) == 0) {
sleep(60);
}
$i++;
}
Как лучше всего отправлять большие электронные письма без sleep () и без ожидания загрузки страницы? В дополнение к работе cron у вас есть другие идеи?
РЕДАКТИРОВАТЬ: у меня есть 680 пользователей, которые будут получать электронную почту, но через некоторое время я получаю 500 Внутренняя ошибка сервера .. почему? Это может быть time_limit?
Очереди сообщений.
Beanstalkd является хорошим решением.
Затем вы можете использовать SDK, как pheanstalk обрабатывать очередь и ее задания.
РЕДАКТИРОВАТЬ: Если у вас есть ограниченный доступ к вашему серверу (например, если вы используете общий хостинг) очереди сообщений как сервис также вариант.
Хороший способ отправить большое количество электронных писем в быстром темпе — это использовать множество рабочих сценариев вместо 1 страницы php (GiamPy привел хороший пример одного из способов, который можно сделать, и я не буду его упоминать, так как не хочу быть лишним).
Один простой (хотя и несколько странный) вариант: для вас, чтобы сделать 20 php-скриптов в файле. Вы могли бы назвать их mailer1.php
, mailer1.php
, …, mailer20.php
, Затем вы можете создать папку с именем mail
и поместите два файла внутрь:
mail/config.txt
а также
mail/email.txt
внутри mail/config.txt
, вы бы включили следующие строки текста:
T
15
где первая строка имеет T
за TRUE
Это означает, что вы хотите, чтобы почтовые отправители отправляли почту как можно быстрее с интервалом в 15 секунд каждый. Очевидно, вы также можете изменить интервал времени на то, что вам нравится.
И в mail/email.txt
у вас будет полное электронное письмо, которое вы хотите отправить
Сделав все это Вы делаете файлы почтовой программы. Вы можете сначала сделать 1, написать код, а затем скопировать и вставить его 19 раз, чтобы получить всего 20 скриптов. Код внутри может выглядеть примерно так:
<?php
$pathconfig = "mail/config.txt";
$pathemail = "mail/email.txt";
$email = file_get_contents($pathemail);//now you have the email saved
$filehandleconfig = fopen($pathconfig, "r");
$bool = trim(fgets($pathconfig));
$sleeptime = (integer) trim(fgets($pathconfig));
fclose($filehandleconfig);
while ($bool === 'T')
{
//... code that sends the email
//recheck if 'T' is still 'T':
$filehandleconfig = fopen($pathconfig, "r");
$bool = trim(fgets($pathconfig));
fclose($filehandleconfig);
sleep($sleeptime);
}?>
Таким образом, предыдущий код будет в основном извлекать электронное письмо, которое необходимо отправить в начале, а также извлекать время, в течение которого оно будет находиться в спящем режиме после отправки электронного письма, и, если оно должно продолжать отправлять электронные письма.
Это означает, что mail/config.txt
file — это ваша панель управления, и если вы измените «T» на что-то еще, кроме «T» (например, «F»), то все сценарии будут прерваны.
Недостатком этого варианта является то, что он немного хакерский, хотя плюс в том, что его можно разработать за считанные минуты.