Ошибка при рассылка большому кол-ву пользователей

Столкнулся на «Новой музыке» с такой неприятной проблемой: вот подписаны у меня на блог/форум 700-1500 пользователей… Если поставить им всем уведомление на появление нового топика, то phpmailer (по smtp) не справляется с отправкой, через nn секунд вылетает ошибка 500 сервера… Как нибудь можно всю отправку почты оформить в фоновый режим?

9 комментариев

avatar

Можно попробовать так:
Выносишь Функцию отправки в отдельный скрипт, а потом при создании топика выполняешь

$iTopicId = 1;
$result = exec("/usr/local/bin/php mailing_topic.php $iTopicId",$aResult);
 
avatar
Кирилл, напомни, как в php ставить паузу, скажем после каждой отправки скрипт должен засыпать на 3 секунды… Вообще есть хорошие скрипты рассылок на php поковыряться, посоветуйте?
avatar
ru2.php.net/sleep хотя пауза тебе не поможет) Тебе разумно запускать отдельный процесс!
По поводу рассылок не помню уже скрипты) а чем тебе библиотека которую Макс взял не нравится?
avatar
пауза для отдельного скрипта понятное дело :)))
phpmailer разве заточен на рассылку большому числу пользователей? пойду посмотрю
avatar
а ты по логам узнал что смтп не работает?
avatar
а кто сказал что не работает? я просто бережно к smtp серверам привык относится, чтобы не забанили :)
avatar
если делать через exec, то он вроде как будет ждать отработки команды. Здесь можно форкнуть процесс для рассылки.
Но лучшим решение будет таким: при создании топика не производить отправку уведомлений, а писать их в отдельную таблицу. Каждые n минут стартует крон и производить рассылку из этой таблице по m уведомлений за раз.
  • ort
  • 0
avatar
да, это идея, даже можно раз в сутки типа дайджест новых топиков рассылать таким образом

p.s. Здесь можно форкнуть процесс для рассылки. это что значит?
avatar
http://ru2.php.net/manual/ru/function.pcntl-fork.php
создает дочерний процесс и родительский по идеи может не ждать его завершения
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.