Отправка массовых писем с помощью PHP - PullRequest
1 голос
/ 30 мая 2010

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

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

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

Rose

Ответы [ 6 ]

2 голосов
/ 30 мая 2010

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

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

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

0 голосов
/ 30 мая 2010

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

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

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

0 голосов
/ 30 мая 2010

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

0 голосов
/ 30 мая 2010

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

0 голосов
/ 30 мая 2010

Если PHP работает в безопасном режиме , set_time_limit не будет иметь никакого эффекта. Если вы должны запустить PHP в безопасном режиме, вы можете изменить ограничение по умолчанию, используя директиву конфигурации <a href="http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time" rel="nofollow noreferrer">max_execution_time</a>.

0 голосов
/ 30 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...