Как отправлять 100000 писем в неделю?

Как можно отправлять электронную почту 100 000 пользователей еженедельно на PHP? Это включает в себя почту для подписчиков с использованием следующих поставщиков:

  • AOL
  • G-Mail
  • Hotmail
  • Yahoo

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

Есть ли библиотека для PHP, которая делает это проще?

3 ответа

Решение

Краткий ответ: хотя технически возможно отправлять 100 тыс. Электронных писем каждую неделю самостоятельно, самое простое, простое и дешевое решение - передать это на аутсорсинг одной из компаний, которые специализируются на ней (я сказал "самый дешевый": нет никаких ограничений для количество времени разработки (и, следовательно, денег), которое вы можете потратить на это при попытке сделать DIY).

Длинный ответ: Если вы решите, что абсолютно хотите сделать это сами, подготовьтесь к миру боли (в конце концов, мы говорим об электронной почте / электронной почте). Тебе понадобиться:

  • содержимое электронной почты, которое не является спамом (в противном случае вы будете сталкиваться с дополнительными крупными препятствиями на каждом этапе, даже с юридическими последствиями)
  • Кроме того, ваш контент должен быть легко отличим от спама - это может быть довольно сложно сделать в некоторых случаях (я слышал, что определенной фармацевтической компании пришлось почти отказаться от электронной почты, поскольку их торговые марки довольно распространены в спаме)
  • собственный настраиваемый SMTP-сервер, который не будет зависать, когда вы отправляете на него 100 тыс. электронных писем (восходящего сервера вашего интернет-провайдера здесь будет недостаточно, и вы сильно расстроите интернет-провайдера; мы использовали два выделенных блока)
  • некоторая оболочка для почты (например, PhpMailer, если PHP - ваш предпочтительный яд; использование PHP mail() само по себе достаточно ужасно)
  • ваша собственная функция отправителя для запуска в цикле, создания писем и передачи их оболочке (обратите внимание, что вы можете столкнуться с ограничениями памяти PHP, если в вашем приложении есть утечка памяти; вам может понадобиться периодически перезапускать процесс отправки, или даже лучше, отделите "создание электронной почты" и "отправка электронной почты" в целом)

Удивительно, но это было легко. Трудная часть на самом деле отправляет это:

  • некоторые серверы будут блокировать вас, когда вы отправляете слишком много писем близко друг к другу, поэтому вам нужно перетасовать и посмотреть свою очередь (например, отправить одно письмо на joe@example.com, затем три на другие домены, только затем другое на otheraddress@example.com)
  • Вы должны иметь правильные записи PTR, SPF, DKIM
  • обработка тайм-аутов удаленного сервера, неверно настроенных записей DNS и других сетевых удовольствий
  • обработка недействительных электронных писем (и нет, регулярное выражение не подходит для этого)
  • обработка отписок (многие законные информационные бюллетени были реклассифицированы как спам из-за многих разочарованных пользователей, которые не смогли отписаться за один шаг и вместо этого решили "пометить как спам" - фильтры спама учатся, особенно с крупными поставщиками электронной почты)
  • обработка отказов и отклонений ("такого почтового ящика нет ojhn@example.com","полный почтовый ящик john@example.com")
  • обработка черных списков и удаление из черных списков (Конечно, вы не рассылаете спам. Некоторые получатели не будут в этом уверены - с таким большим списком это может происходить иногда, независимо от того, какие меры предосторожности вы принимаете. Некоторые люди (например, ваш не очень) - недобросовестные конкуренты) могут даже зайти так далеко, чтобы ложно сообщать о ваших почтовых сообщениях как о спаме - это действительно происходит. В среднем, для удаления себя из черного списка требуются недели.)

И в довершение всего, вам придется управлять его юридической частью (различными федеральными, государственными и местными законами; и даже различными путями законов, когда вы отправляете за пределы США (примечание: у вас нет возможности узнать, если Джо @hotmail.com живет на юго-западе Эльбонии, в стране с самыми драконовскими антиспамовыми законами в мире)).

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

  • удаленные SMTP-серверы не хотят общаться с вашим SMTP-сервером
  • ваши письма помечаются как спам (<blink> здесь не твой друг и не <font color=...>)
  • Ваши письма доставляются с опозданием на несколько дней или даже недель (вопреки распространенному мнению, SMTP предназначен для того, чтобы приложить максимум усилий, чтобы доставить сообщение когда-нибудь в будущем, а не доставить его сейчас)
  • ваши письма вообще не доставляются (уже отправлены с сервера электронной почты на прыжке № 4, еще не отправлены с сервера на прыжке № 5, сервер, на котором в данный момент хранится сообщение, вылетает, данные теряются)
  • ваши письма искажаются каким-либо сервером braindead в пути (этот вариант несколько разрешим с кодировкой base64, но затем размер увеличивается, и электронная почта выглядит более подозрительно)
  • Ваши письма доставлены, и получатели, кажется, не хотят их ("Я уверен, что я не подписался на это, я точно помню, что я сделал год назад" (конечно, вы делаете, сэр))
  • пользователи с различными версиями Microsoft Outlook и его специальной обработки интернет-почты
  • Режим ученика мастера (самоусиливающийся цикл положительной обратной связи - другими словами, автоматические электронные письма в виде ответов на автоматические электронные письма в виде ответов на...; вы действительно не хотите быть тем, кто это отключит, поскольку Вы бы разозлили половину интернета на себя)

и это будет ваша работа - устранять неполадки и решать это (подсказка: вы не можете, в основном). Люди, которые управляют законным бизнесом массовой рассылки, знают, что в конце концов вы не можете решить это, и что они также не могут решить это - и у них есть причины, хорошо изученные, задокументированные и изложенные (возможно, даже как презентация Powerpoint - в комплекте со звуками и классными переходами - которые могут понять ваши боссы), как они должны были это объяснить миллион раз раньше. Кроме того, для проблем, которые на самом деле решаемы, они очень хорошо знают, как их решать.

Если после всего этого вы не обескуражены и все еще хотите это сделать, продолжайте: даже возможно, что вы найдете лучший способ сделать это. Просто знайте, что путь вперед будет нелегким - отправка электронной почты тривиальна, доставить ее сложно.

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

За последние 6 месяцев мы использовали четырех разных поставщиков SMTP с целью выяснить, какой из них был лучшим.

Вот краткое изложение того, что мы нашли...

AuthSMTP

  • Самый дешевый вокруг
  • Нет анализа / отчетности
  • Нет отслеживания открытий / кликов
  • Были небольшие колебания на некоторых посылках

штемпелевать

  • Очень дешево, но не так дешево, как AuthSMTP
  • Красивая cpanel, но без отслеживания открытий / кликов
  • Отслеживание активности на уровне отправки, чтобы вы могли открыть одно отправленное письмо и посмотреть, как оно выглядело, и данные о доставке.
  • Приходится использовать API. Отправка по SMTP была недавно введена, но она глючит. Например, мы заметили, что кавычки (") в строке темы удалены.
  • Не удается отправить вложение, которое вы хотите. Must be on approved list of file types and under a certain size. (10 MB I think)
  • Requires a set list of from names/addresses.

JangoSMTP

  • Expensive in relation to the others – more than 10 times in some cases
  • Ugly cpanel but great tracking on opens/clicks with email-level detail
  • Had hesitation, at times, when sending. On two occasions, sends took an hour to be delivered
  • Requires a set list of from name/addresses.

SendGrid

  • Not quite a cheap as AuthSMTP but still very cheap. Many customers can exist on 200 free sends per day.
  • Decent cpanel but no in-depth detail on open/click tracking
  • Lots of API options. Options (open/click tracking, etc) can be custom defined on an email-by-email basis. Inbound (reply) email can be posted to our HTTP end point.
  • Absolutely zero hesitation on sends. Every email sent landed in the inbox almost immediately.
  • Can send from any from name/address.

Заключение

SendGrid был лучшим с Postmark, который занял второе место. Мы никогда не видели каких-либо колебаний во время отправки ни с одним из этих двух - в некоторых случаях мы отправляли несколько сотен электронных писем одновременно - и они оба имеют лучший ROI, учитывая солидный набор функций.

Вот что я недавно сделал в PHP на одной из моих больших систем:

  1. Пользователь вводит текст бюллетеня и выбирает получателей (который генерирует запрос для получения адресов электронной почты на будущее).

  2. Добавьте текст рассылки и запрос получателей в строку в таблице mys ql с именем * email_queue *

    • (В таблице email_queue есть столбцы "to" "subject" "body" "priority")
  3. Я создал еще один скрипт, который запускается каждую минуту как cron. Он использует класс SwiftMailer. Этот скрипт просто:

    • в рабочее время отправляет все письма с приоритетом == 0

    • в нерабочее время отправляйте другие письма по приоритету

В зависимости от настроек хостов, теперь я могу настроить его с помощью стандартных плагинов Swiftmailers, таких как Antiflood и Throttle...

$mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(50, 30));

а также

$mailer->registerPlugin(new Swift_Plugins_ThrottlerPlugin( 100, Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE ));

и т. д.

Я расширил его за пределы этого псевдокода с вложениями и многими другими настраиваемыми настройками, но он работает очень хорошо, если ваш сервер настроен правильно для отправки электронной почты. (Возможно, не будет работать на виртуальном хостинге, но теоретически это должно...) Swiftmailer даже имеет настройку

$message->setReturnPath

Который я сейчас использую для отслеживания отказов...

Счастливые Трассы! (Счастливые электронные письма?)

Другие вопросы по тегам