Как отправить большое письмо?

$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? введите описание изображения здесь

0

Решение

Очереди сообщений.

Beanstalkd является хорошим решением.

Затем вы можете использовать SDK, как pheanstalk обрабатывать очередь и ее задания.

РЕДАКТИРОВАТЬ: Если у вас есть ограниченный доступ к вашему серверу (например, если вы используете общий хостинг) очереди сообщений как сервис также вариант.

2

Другие решения

Хороший способ отправить большое количество электронных писем в быстром темпе — это использовать множество рабочих сценариев вместо 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»), то все сценарии будут прерваны.

Недостатком этого варианта является то, что он немного хакерский, хотя плюс в том, что его можно разработать за считанные минуты.

-1

По вопросам рекламы [email protected]