Веб-приложение на основе PHP и массовая рассылка - PullRequest
3 голосов
/ 08 октября 2010

Я разработал веб-приложение, куда студенты по всей стране приезжают и регистрируются для каких-то академических целей.Ожидается, что в следующем году количество пользователей составит около 100 тыс.

Мне нужно отправлять всем этим людям периодические письма.Веб-приложение разработано с использованием codeigniter.PHP-скрипт может работать в течение 3000 секунд.Но приложение не может отправлять письма более чем 100 пользователям.

Машина, на которой я работаю, находится в облаке и имеет оперативную память 256 МБ.Я использовал команду free -m для проверки использования памяти, но это не проблема.Все отлично работает на 10-20 писем.

Какими были бы лучшие решения?Можно ли как-то перенести эту работу в другой скрипт приложения / программы / оболочки?

Ответы [ 5 ]

1 голос
/ 09 октября 2010

Конечно, вы можете отправлять электронные письма самостоятельно с сервера, но это только полдела.

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

Также, если вы работаете в Соединенных Штатах, вы должны быть знакомы с CAN-SPAM: http://business.ftc.gov/documents/bus61-can-spam-act-Compliance-Guide-for-Business

1 голос
/ 08 октября 2010

Если вы не можете использовать какой-либо внешний сервис для своих электронных писем, я бы просто установил cronjob, который отправляет пару писем каждые n секунд. Довольно обременительно отправлять много писем с php, как вы обнаружили. Но решение cronjob работает каждый раз, насколько я знаю.

Итак, у вас есть список адресов электронной почты / адресов и cronjob, который повторяет этот список и отправляет сообщения электронной почты.

1 голос
/ 08 октября 2010

MailChimp является подходящим кандидатом для этого.Обслуживание почты - это трудоемкая задача, и отправка на нее до 100 тыс. Адресов электронной почты будет трудной задачей для вашего сервера.

Они предоставляют очень эффективный PHP API.

https://developer.mailchimp.com/

0 голосов
/ 09 октября 2010

Возможно, вы сможете использовать pcntl_fork или создать процесс демона .

Fork: с помощью процесса fork вы можете группировать электронные письма в группы и отправлять их. каждая партия может быть в своем дочернем процессе fork

Daemon: с помощью Daemon вы можете создать пакет электронных писем и отправить их для обработки демоном. демон может запускать несколько пакетов одновременно.

0 голосов
/ 08 октября 2010

Очень уместно вывести это из потоков вашего веб-сервера во что-то, что работает автономно. Обычно для таких вещей у меня есть таблицы в БД, куда записывается соответствующая информация с веб-сайта, поэтому, когда я буду готов к электронной почте, что-то на бэкэнде может собрать электронные письма и отправить их. Если вы отправляете 100 000 электронных писем, вам нужно что-то многопоточное.

В этом случае было бы неплохо использовать один из множества готовых инструментов для этого, а не изобретать велосипед. Здесь мы используем старую версию Campaign Enterprise, и я могу выдавать запросы, которые я могу использовать для извлечения данных из моей веб-базы данных напрямую через ODBC. Это может или не может работать хорошо для вас, учитывая, что вы находитесь в облаке.

Редактировать: Вы также можете написать PHP-скрипт для этого и вызвать PHP из оболочки. Возможно, вы можете обойти ограничение тайм-аута таким образом? (Это предполагает, что вы имеете в виду некоторый тайм-аут на уровне обслуживания. Если вы говорите о обычном тайм-ауте PHP, это можно обойти с помощью set_time_limit().)

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