Является ли php mail () хорошим вариантом для массовой рассылки? - PullRequest
5 голосов
/ 07 марта 2012

Я создаю систему, в которую периодически отправляется список из тысяч электронных писем. Я знаю, что функция mail() в PHP довольно тяжелая, особенно если вызывать ее слишком много раз одновременно.

Примерно, как работает моя система, я создаю очередь писем в MySQL и отправляю их партиями по 25, используя mail(), удаляя из таблицы 25 лучших отправленных.И я жду 2 секунды между каждым набором 25.

Это слишком много усилий для сервера, или я могу продвинуть его немного дальше?Допустим, 50 в секунду?Или есть лучший способ отправки большого количества электронных писем за меньшее время без ущерба для производительности сервера.

У меня есть выделенный сервер без mail() лимита вызовов.

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

Есть и другие факторы, которые следует учитывать, кроме производительности, но короткий ответ: есть лучшие варианты.Amazon SES и MailChimp, о которых я знаю, слышали положительные отзывы.

Посмотрите на ответ j08691 относительно производительности, но другие проблемы с использованием mail() для этой цели включают:

  1. Масштабируемость (вы попадете в стену, которую в конечном итоге не сможет обработать ни один SMTP-сервер, и вы уже об этом думаете)

  2. Целостность - у вас гораздо больше шансов получитьпомечается как спам при развертывании вашей собственной почтовой рассылки, особенно с использованием mail, поскольку она использует локальный sendmail по своему замыслу.

  3. Стоимость / Выгода и рентабельность инвестиций - надежные массовые рассылки понимают это правильнои по конкурентоспособной ставке.В какой-то момент вы платите себе меньше в час за обслуживание своего почтового сервера в случае его сбоя, выхода из черных списков, написания макета электронной почты вручную, общего обслуживания и т. Д. И т. Д., Чем платите за службу массовой рассылки.

В целом, большая проблема заключается в том, что вы должны делать всю работу самостоятельно, и вы, скорее всего, будете помечены как СПАМ, чтобы не платить за услугу, которая сможет отправлять сотни пользователей.сообщений электронной почты в секунду вместо ста минут, когда PHP не занят всем, что он обрабатывает для вашего веб-приложения.

Персональный анекдот (не одобрение для SES, просто рассылка): у нас был клиентна каждую кампанию было отправлено более 100 тыс. писем, минимум 1–3 кампании в день.Они начали жаловаться, что клиенты получали электронные письма о «ежедневных сделках» с опозданием на 2 дня.Это было не потому, что библиотека Mailer была медленной (даже в этом приложении избегали использования простого mail), а в том, что нельзя было уверенно отправлять всех писем за каждые кампания до того, как письмо было неактуальнымМы переключили их на SES (с некоторой оптимизацией с нашей стороны, но не сильно), и они могли очистить кампанию менее чем за час.

4 голосов
/ 07 марта 2012

Попробуйте использовать PHPMailer.я использовал его для отправки около 100 писем каждый день без каких-либо проблем

4 голосов
/ 07 марта 2012

Из руководства PHP :

Примечание:

Стоит отметить, что функция mail () не подходит для больших объемы электронной почты в цикле. Эта функция открывает и закрывает SMTP сокет для каждого письма, что не очень эффективно.

Для отправки большого количества сообщений электронной почты см. » PEAR :: Mail и» PEAR :: Mail_Queue пакетов.

...