Отправка массовых писем с использованием PHP

Я должен отправлять письма всем пользователям сайта, когда к нам присоединяется новый пользователь. Моя проблема в том, что скрипт прекращает выполнение после отправки около 400 писем. Я установил set_time_limit на 0. А также я даю sleep (2) после отправки 10 писем.

В чем может быть причина этой проблемы. Любое решение этой проблемы. Есть ли лучший способ рассылки массовых писем?

Заранее спасибо

Роза


person Rose    schedule 30.05.2010    source источник


Ответы (6)


Мы делаем это с помощью cron.

Мы (в нашей компании) разбили список пользователей на блоки по 50 адресов. Эти блоки помещаются в таблицу в базе данных (с данными, которые связывают этот блок с данными электронной почты (заголовки, тело, ..).

Через файл cron.php, который запускается каждые 5 минут или около того, система захватывает первый доступный блок в базе данных, который необходимо отправить, и отправляет электронные письма.

person Zilverdistel    schedule 30.05.2010
comment
Я также использую задания cron, которые должны выполняться дважды в день. Я не могу следовать описанному выше методу, потому что 1. На сайте может быть несколько новых пользователей, и этот список время от времени меняется. 2. Мне нужно обновить поле (новый флаг пользователя до нуля), соответствующее каждому новому пользователю, после отправки данных этого пользователя всем другим пользователям на сайте. - person Rose; 30.05.2010

У меня была аналогичная проблема, и это было связано с использованием памяти, как вы их отправляете, можете ли вы предоставить какой-либо код?

person mononym    schedule 30.05.2010

Если PHP работает в безопасном режиме, set_time_limit не будет иметь никакого эффекта. Если вы должны запускать PHP в безопасном режиме, вы можете изменить лимит времени по умолчанию с помощью директивы конфигурации max_execution_time.

person Propeng    schedule 30.05.2010

Я не знаю, почему ваш сценарий останавливается. Но вы также просили найти более эффективные способы рассылки массовых писем. Я обнаружил, что использование пакета электронной почты дает вам гораздо больше контроля, чем встроенная почтовая команда PHP. Swift Mailer - очень хороший вариант.

person Sam    schedule 30.05.2010

Попробуйте настроить очередь задач. Когда ваше веб-приложение хочет отправить электронное письмо, оно добавляет его в базу данных задач, и каждый из них обрабатывает отдельный демон. Это означает, что вы можете настроить отправку электронного письма каждому участнику веб-сайта, и ваш демон будет отправлять каждое письмо каждые 2-4 секунды. См. модуль очереди задач Kohana (PHP), Delayed_job (Ruby) и Celery. (Python) для вдохновения.

person Ivy Evans    schedule 30.05.2010

Я отправляю новый ответ, потому что этот не имеет отношения к моему предыдущему.

Мне было интересно: где именно вы устанавливаете set_time_limit на 0? Я имею в виду, это в php.ini, .htaccess или из файла php с ini_set ().

Возможно ли, что это значение будет переопределено?

person Zilverdistel    schedule 30.05.2010