PHP: отправка огромного количества писем в пакетном режиме

Отложив в сторону пренебрежение нежелательным маркетингом, мне нужно отправить около 15 000 писем клиентам. Мой коллега попытался отправить их через php-почтовый цикл, но, очевидно, он быстро застрял. Существует ли обычное (то есть через PHP-скрипт) быстрое выполнение? Если нет, то как вы предлагаете мне это сделать (может быть, через exec ) без лишних накладных расходов?

Благодаря!

Solutions Collecting From Web of "PHP: отправка огромного количества писем в пакетном режиме"

Я использовал Mail_Queue PEAR для очереди 200 000 писем за раз. Заполнение базы данных легко и быстро, даже с настроенным контентом, а затем довольно простой скрипт отправляет около 250 раз – если среднее значение нагрузки не слишком велико. Затем он перемещается и отправляет следующую партию.

Вы не будете отправлять их быстрее, чем обычно, но это будет без проблем.

Учебное пособие дает вам почти все, что вам нужно – просто обходите скрипт «send_messages.php» (из командной строки лучше), пока очередь базы данных не будет пустой.

Вы могли бы использовать что-то вроде Gearman для создания системы очередей, как рекомендовано здесь . Другим вариантом будет просмотр платного сервиса, такого как простая служба электронной почты Amazon (SES)

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

Я считаю, что надежная система должна использовать очереди. Основной скрипт просто добавляет получателей в очередь, а затем у вас есть вторичный процесс, который выбирает элементы из очереди, отправляет их и, наконец, маркирует их как отправленные. Этот вторичный процесс можно запустить вручную (возможно, из командной строки) или через вкладку cron.

Я никогда не использовал, но у меня это есть в моих закладках: http://ledscripts.com/free/php/phpledmailer

Вы запускаете его через CGI или как скрипт в командной строке? Лучше всего запустить его как скрипт в командной строке.

Если вы говорите, что он застревает, попробуйте запустить set_time_limit(0); чтобы избежать выхода PHP из слишком длинного выполнения.