Как отправить 100 000 электронных писем в неделю?

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

  • AOL
  • G-Mail
  • Hotmail
  • Yahoo

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

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

Related of "Как отправить 100 000 электронных писем в неделю?"

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

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

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

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

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

И в довершение всего вам придется управлять юридической частью (различные федеральные, государственные и местные законы и даже различные ассоциации законов, когда вы отправляете за пределы США (примечание: вы не можете найти, если joe @ 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 была недавно введена, но она глючит. Например, мы заметили, что кавычки (") в строке темы лишены.
  • Не удается отправить какое-либо вложение. Должен быть в утвержденном списке типов файлов и под определенным размером. (10 МБ, я думаю)
  • Требуется набор списка из имен / адресов.

JangoSMTP

  • Дорогое по отношению к другим – более чем в 10 раз в некоторых случаях
  • Уродливый cpanel, но отличное отслеживание при открытии / кликах с деталями на уровне электронной почты
  • Если бы колебался, иногда, при отправке. В двух случаях отправления занимали час, который должен быть доставлен
  • Требуется набор списка из имени / адреса.

SendGrid

  • Не совсем дешево, как AuthSMTP, но все же очень дешево. Многие клиенты могут существовать на 200 бесплатных отправках в день.
  • Достойный cpanel, но не подробные сведения об отслеживании открытия / клика
  • Множество вариантов API. Параметры (отслеживание открытий / кликов и т. Д.) Можно настроить на основе электронной почты по электронной почте. Входящее (ответное) электронное письмо можно отправить в нашу конечную точку HTTP.
  • Абсолютно нулевое колебание при отправке. Каждое отправленное письмо приземлилось в почтовом ящике почти сразу.
  • Может отправлять от имени / имени.

Вывод

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

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

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

  2. Добавьте текст бюллетеня и запрос получателей в строку таблицы mysql, называемую * 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 

Что я теперь использую для отслеживания отскоков …

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