PHP: отправка большого количества писем в пакетном режиме - PullRequest
6 голосов
/ 03 марта 2011

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

Спасибо! * * 1004

Ответы [ 4 ]

4 голосов
/ 03 марта 2011

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

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

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

2 голосов
/ 03 марта 2011

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

.
1 голос
/ 03 марта 2011

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

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

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

0 голосов
/ 03 марта 2011

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

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

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