Как отправить электронное письмо на 100 000 пользователей в неделю на PHP? Это включает в себя почту подписчикам, использующим следующие провайдеры:
Важно, чтобы вся электронная почта была доставлена, насколько это возможно. Очевидно, что просто отправка почты обычно не будет ничего, кроме создания проблем.
Есть ли библиотека для PHP, которая делает это проще?
Короткий ответ: хотя технически можно отправлять по электронной почте 100 тыс. Каждую неделю самостоятельно, самым простым, самым простым и дешевым решением является передача его на аутсорсинг одной из компаний, которые ее специализируют (я сказал «самый дешевый»: нет предела количество времени разработки (и, следовательно, денег), которое вы можете погрузиться в это при попытке сделать DIY).
Длинный ответ: если вы решите, что вы абсолютно хотите сделать это сами, подготовьтесь к миру боли (в конце концов, это электронная почта / e-fail, о которой мы говорим). Вам понадобиться:
mail()
достаточно ужасен сам по себе) Удивительно, но это была легкая часть. Жесткая часть фактически отправляет его:
И в довершение всего вам придется управлять юридической частью (различные федеральные, государственные и местные законы и даже различные ассоциации законов, когда вы отправляете за пределы США (примечание: вы не можете найти, если joe @ hotmail.com живет в Юго-Западной Эльбонии, стране с самыми драконовскими законами антиспама в мире)).
Я почти уверен, что пропустил несколько голов этой гидры – вы все еще уверены, что хотите сделать это сами? Если так, то будет еще одна волна, на этот раз просто неприятные проблемы, связанные с отправкой электронной почты. (Вы видите, SMTP – это протокол хранения и пересылки, что означает, что ваше электронное письмо будет перемешано на многих SMTP-серверах по всему Интернету, в надежде, что следующий будет немного ближе к конечному получателю. электронное письмо отправляется на SMTP-сервер, который помещает его в свою очередь, и по истечении времени он перенаправляет его на другой SMTP-сервер, пока он не достигнет SMTP-сервера для данного домена. , или через несколько минут или часов или дней или никогда.) Таким образом, вы увидите следующие проблемы: большинство из которых может произойти как в пути, так и в пункте назначения:
<blink>
не ваш друг здесь, а не <font color=...>
) и это будет ваша работа по устранению и устранению этого (подсказка: вы не можете, в основном). Люди, которые управляют законными предприятиями массовой рассылки, знают, что в конце концов вы не можете решить эту проблему и что они не могут ее решить, – и у них есть причины, которые хорошо исследованы, задокументированы и описаны (возможно, даже как презентация Powerpoint – в комплекте со звуками и прохладными переходами, которые могут понять ваши боссы), поскольку они должны были объяснить это миллион раз раньше. Кроме того, для проблем, которые фактически разрешимы, они прекрасно знают, как их решить.
Если, в конце концов, вы не обескуражены и все еще хотите сделать это, идите прямо вперед: даже возможно, что вы найдете лучший способ сделать это. Просто знайте, что дорога впереди будет нелегкой – отправка электронной почты тривиальна, ее достать сложно.
Люди рекомендовали MailChimp, который является хорошим поставщиком для массовой электронной почты. Если вы ищете хорошего поставщика для транзакционной электронной почты, я могу помочь.
За последние 6 месяцев мы использовали четыре разных поставщика SMTP с целью выяснить, какой из них был лучшим.
Вот краткое описание того, что мы нашли …
AuthSMTP
штемпелевать
JangoSMTP
SendGrid
Вывод
SendGrid был лучшим, когда Postmark занял второе место. Мы никогда не видели каких-либо колебаний в времени отправки с одним из этих двух – в некоторых случаях мы отправляли сразу несколько сотен писем – и оба они имеют лучшую рентабельность инвестиций, учитывая прочный атрибут.
Вот что я недавно сделал в PHP на одной из моих больших систем:
Пользователь вводит текст бюллетеня и выбирает получателей (который генерирует запрос для получения адресов электронной почты для последующего использования).
Добавьте текст бюллетеня и запрос получателей в строку таблицы mysql, называемую * email_queue *
Я создал другой скрипт, который запускается каждую минуту в качестве задания 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
Что я теперь использую для отслеживания отскоков …
Счастливые тропы! (Счастливые письма?)