Я должен отправить письма всем пользователям в сайте, когда новый пользователь присоединяется. Моей проблемой является выполнение остановок сценария после отправки приблизительно 400 писем. Я установил set_time_limit на 0. И также я даю сон (2) после отправки 10 писем.
Какова может быть причина позади этой проблемы. Любое решение для этой проблемы. Там какой-либо лучший метод должен послать объемные электронные письма?
Заранее спасибо
Повысился
У меня была похожая проблема и она была связана с использованием памяти, как вы отправляете их, можете ли вы предоставить какой-нибудь код?
Если PHP работает в безопасном режиме, set_time_limit
не будет иметь никакого эффекта. Если вы должны запустить PHP в безопасном режиме, вы можете изменить установленный по умолчанию лимит времени с помощью директивы конфигурации max_execution_time
.
Я не знаю, почему ваш скрипт останавливается. Но вы также спрашивали о лучших способах отправки массовых писем. Я обнаружил, что использование почтового пакета дает гораздо больше контроля, чем встроенная команда PHP mail. Swift Mailer - очень хороший вариант.
Я отправляю новый ответ, потому что этот не имеет отношения к моему предыдущему.
Мне было интересно: где именно вы устанавливаете set_time_limit
на 0
? Я имею в виду, это в php.ini, .htaccess или из файла php с ini_set ().
Возможно ли, что это значение будет переопределено?
Попробуйте настроить очередь задач. Когда ваше веб-приложение хочет отправить письмо, оно добавляет его в базу данных задач, и отдельный демон обрабатывает каждую из них. Это означает, что вы можете задать отправку письма каждому пользователю сайта, и ваш демон будет отправлять каждое письмо каждые 2-4 секунды. Смотрите Kohana task queue module (PHP), Delayed_job (Ruby) и Celery (Python) для вдохновения.
Мы делаем это с помощью cron.
Мы (в нашей компании) разбиваем список пользователей на блоки по 50 адресов. Эти блоки помещаются в таблицу в базе данных (с данными, которые связывают этот блок с данными электронной почты (заголовки, тело, ...)).
Через файл cron.php, который запускается каждые 5 минут или около того, система берет первый доступный блок в базе данных, который нужно отправить, и рассылает электронные письма.