PHP MS Mail Лучшие практики? (PHPMailer + Gmail)

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

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

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

Сейчас моя текущая настройка:

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

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

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

Спасибо!

Ответы

Ответ 1

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

Наличие локального SMTP-сервера - это ИМО путь:

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

Ответ 2

Google App Engine

Я бы написал это в Google app engine (python), потому что:

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

PHP

Если бы я реализовал его в PHP, я бы

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

из php/apache/webpage

Это страница, с которой вы будете отправлять сообщения пользователю. На этой странице вы отправите сообщение 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 script в фоновом режиме:

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

// 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, но я бы пошел на приложение, потому что его проще реализовать.

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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