Лучшие практики массовой рассылки PHP?(PHPMailer + Gmail)

StackOverflow https://stackoverflow.com/questions/1804964

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Насколько я могу судить, в GMail нет ограничения на скорость отправки сообщений отдельным лицам (хотя максимальное количество получателей составляет 500).

На данный момент моя текущая настройка:

  • Когда сообщение отправляется через систему, оно попадает в очередь электронной почты.
  • Сценарий cron извлекает сообщения из очереди каждые несколько минут и отправляет их.
  • Вся электронная почта передается через SMTP-сервер GMail.
  • Фактическое приложение, выполняющее рассылку, — PHPMailer.

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

  1. Должен ли я вместо этого использовать локальный SMTP-сервер?
  2. Должен ли я вместо этого использовать почтовый двоичный файл на локальном компьютере?В этом случае я мог бы вообще не стоять в очереди?
  3. Есть ли общепринятый способ сделать это?

Спасибо!

Это было полезно?

Решение

Учитывая, что количество электронных писем достигает 10 000 в день, я бы не стал полагаться на GMail (или любой другой) SMTP.Не то чтобы они не могли с этим справиться, очевидно, они могут справиться НАМНОГО больше.Но, возможно, они этого не хотят.

По моему мнению, наличие локального SMTP-сервера:

  • Его довольно легко настроить (только НЕ позволяйте людям использовать его без строгой схемы аутентификации)
  • Самый современный МТА очень хорошо справляется с очередями отправки
  • Вам не придется иметь дело с GMail (или другими), которые когда-нибудь решат заблокировать вашу учетную запись по причинам квоты.

Другие советы

Google App Engine

Я бы написал это в движке приложений Google (python), потому что:

  • Он хорошо масштабируется.
  • У него хороший API электронной почты.
  • У него есть очередь задач с хорошим API для доступа к ней.
  • Потому что Python — действительно хороший язык.
  • Это (относительно) дешево.

PHP

Если бы я реализовал это на PHP, я бы

  • Найдите себе хороший SMTP-сервер, который позволит вам отправлять такой объем почты, потому что Gmail не позволит вам отправлять такой объем почты.Я уверен, что это будет стоить вам денег.
  • Найдите себе достойную библиотеку электронной почты PHP для отправки сообщений, например, с помощью PHPMailer, как вы сказали.
  • Используйте очередь сообщений, например, beanstalkd, чтобы помещать сообщения электронной почты в очередь и отправлять электронную почту асинхронно.Во-первых, потому что при этом у пользователя будет более быстрая загрузка страницы.Во-вторых, с помощью очереди сообщений, такой как beanstalkd, вы можете лучше регулировать скорость отправки, что не позволит перегружать ваш компьютер работой.Вам понадобится ssh-доступ к серверу для компиляции (установки) beanstalkd.Вы можете найти beanstalkd по адресу бобовый стебель
  • Вам также понадобится доступ по ssh для запуска PHP-скрипта в фоновом режиме, который будет обрабатывать очередь сообщений.Вы можете найти beanstalkd-клиент по адресу PHP beanstalkd-клиент

из php/apache/веб-страницы

Это страница, с которой вы будете отправлять сообщения пользователю.С этой страницы вы отправите сообщение beanstalkd, написав что-то в следующих строках:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

Вам необходимо поместить сообщения в очередь сообщений с помощью команды put.

Из долго работающего PHP-скрипта в фоновом режиме:

Код будет выглядеть примерно так:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

Как я уже говорил, это возможно как с PHP, так и с движком приложений Google, но я бы выбрал движок приложений, потому что его проще реализовать.

Gmail и Google Apps ограничивают вас примерно 500 электронными письмами в день.Я не уверен, как это сочетается с максимальным количеством получателей 500, но если вы хотите отправить 10 000 электронных писем, вам, вероятно, захочется найти другой почтовый сервер.Лично я использую локальный сервер, интернет-провайдера или SMTP центра обработки данных.

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

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

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

Я не уверен, публикуется ли оно где-нибудь, но по опыту могу сказать вам, что Gmail заморозит вашу учетную запись примерно на пятнадцать минут, если вы начнете отправлять сотни сообщений одновременно.Это случилось со мной на прошлой неделе.Я думаю, вам следует разместить собственный SMTP-сервер.Использование функции mail() часто приводит к тому, что ваша почта попадает в чью-то папку со спамом.

Просто установите Postfix на локальном компьютере или на компьютере в той же локальной сети для достижения максимальной скорости доступа.Убедитесь, что он надежно закреплен снаружи и доступен изнутри.

Затем напишите свой PHP-скрипт, чтобы напрямую вставлять электронные письма в очередь Postfix.Это значительно увеличит скорость обработки доставки почты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top