Является ли php mail() хорошим вариантом для массовой рассылки?

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

Замечания:

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

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

Другие вопросы по тегам