Хотите разработать систему рассылки новостей для 18000 получателей электронной почты с использованием быстрой рассылки - PullRequest
0 голосов
/ 22 сентября 2011

Я хотел бы разработать систему рассылки новостей, используя Swiftmailer. Я хотел бы знать:

1) Требуется ли для этого задание cron?

2) Batchsend() или Send() с loop, какой из них лучше (я хочу, чтобы каждый адрес был в поле To)?

Ответы [ 4 ]

0 голосов
/ 25 ноября 2011

Я делаю аналогичные действия для уведомлений в приложении ERP, в основном с настроенными электронными письмами.

Способ, которым я делаю это, - использовать Gearman и ставить в очередь все письма, которые необходимо отправить, а затем работаю с Gearman, чтобысделать фактическую отправку.Таким образом, вы можете иметь несколько сотрудников, отправляющих электронные письма, и клиентский интерфейс не блокируется, ожидая отправки каждого электронного письма.

0 голосов
/ 22 сентября 2011

Не по теме, я знаю, но, возможно, полезно:

Рассматривали ли вы возможность использования поставщика новостной рассылки по электронной почте, такого как http://mailchimp.com/? Очевидно, что это сопряжено с затратами, но вы должны сравнить это с затратами на его разработку, запуск и обслуживание и поддержание.

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

Редактировать: я никоим образом не связан с MailChimp. Это только тот, который я использовал.

0 голосов
/ 22 сентября 2011

send() является предпочтительным.Фактически, batchSend() было удалено .Создайте петлю и отправьте их все вручную.

0 голосов
/ 22 сентября 2011

По первому вопросу; Лучше всего создать сценарий для отправки следующих x писем из списка получателей и повторного вызова, пока все получатели не будут обработаны. Вам нужно будет следить за тем, кто был обработан в БД, и вводить обработку ошибок в случае неудачи; хорошая стратегия для каждого пользователя:

  • отметка в дБ как обработка
  • отправить письмо получателю
  • отметка в дБ как обработанная

Таким образом, вы можете увидеть, сколько людей потерпело неудачу в конце (то есть тех, кто все еще помечен как «обработка»).

Чтобы повторить процесс, вы можете использовать CRON и повторять каждую минуту; но что, если отправка займет более 1 минуты (например, из-за медленного SMTP-соединения), тогда у вас будет запущено два процесса вместе, поэтому вам нужно либо предотвратить это, либо ввести какую-то блокировку (приведенный выше пример пометки пользователей как " обработка "не позволит двум одновременным экземплярам сценария обрабатывать одни и те же люди).

Другая проблема с CRON каждую минуту заключается в том, что отправка всех ваших писем может занять несколько лет. У меня была именно эта проблема, и поэтому я написал Fat Controller, который обрабатывает параллельную обработку и повторение для вас. Я сделал простой сценарий оболочки, который запускается каждый день CRON и запускает Fat Controller, который затем запускает множество экземпляров сценария отправки PHP. Вот некоторые примеры использования и дополнительная информация:

http://fat -controller.sourceforge.net / потребительная cases.html

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

...