Отправка массовой электронной почты с помощью PHP

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

Каков наилучший способ реализации функции массовой почты?

Работает ли следующая функция?

function massmail() { $content = '...'; foreach ($recipients as $r) { $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">'; mail($r, 'subject', $_content); } } 

Другой вопрос: если все 5000 подписчиков используют Yahoo Mail, будет ли Yahoo рассматривать это как атаку DDOS и заблокировать IP-адрес моего SMTP-сервера?

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

Я предлагаю вам взглянуть на SwiftMailer , который поддерживает HTML, поддерживает разные типы mime и SMTP-аутентификацию (что, скорее всего, не помешает вашей почте как спам).

Я бы вложил все электронные письма в базу данных (вроде как очередь), а затем обрабатывал их по одному, как это было в вашем коде (если вы хотите использовать swiftmailer или phpmailer и т. Д., Вы тоже можете это сделать).

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

Поместив их в базу данных, сначала у вас есть

  1. запись того, кого вы отправили
  2. если ваш скрипт истекает или не работает, и вы должны запустить его снова, то вы не будете в конечном итоге отправлять один и тот же адрес электронной почты людям дважды
  3. вы можете запустить процесс отправки из задания cron и выполнять пакет за раз, чтобы ваш почтовый сервер не был перегружен, и отслеживайте, что было отправлено

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

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

Это совет, а не ответ: вам гораздо лучше использовать специализированное программное обеспечение для рассылки. mailman – часто используемый пример, но достаточно простого, как mlmmj . Отправка массовых писем на самом деле является более сложной задачей, чем кажется на самом деле. Вам не только нужно отправлять письма, но и отслеживать «мертвые» адреса, чтобы ваша почта или, что еще хуже, ваш почтовый сервер, помечены как спам. Вы должны обращаться с людьми, которые не подписываются по той же причине.

Вы можете реализовать эти вещи самостоятельно, но особенно обработка отказов – это трудная и неуправляемая работа. Использование диспетчера списков рассылки сделает вещи намного проще.

Что касается того, как сделать вашу почту приемлемой для yahoo, это совсем другое дело. При всех его ошибках они, похоже, вкладывают большие средства в SPF и DomainKey. Вам, вероятно, придется их реализовать, что потребует сотрудничества от администратора вашего почтового сервера.

Вы можете использовать CRON для такого рода операций. Конечно, отправка массовой почты не очень хорошая, она может быть обнаружена как спам, ddos, авария на вашем сервере и т. Д.

Таким образом, CRON может стать отличным решением, сразу отправить 100 писем, затем подождать несколько минут, следующие 100 и т. Д.

Почему бы вам не использовать phplist ? Он также построен поверх PHP Mailer, и многие его лидеры используют его. Я сам использовал его пару раз, чтобы отправить массовые письма своим клиентам. Хорошая вещь о phplist заключается в том, что вы можете дросселировать свои сообщения на уровне домена плюс уровень ограничения по времени. Полный список функций можно найти по адресу: http://www.phplist.com/details.

То, что мы также сделали с несколькими внутренними системами захвата, которые у нас были, – это подтолкнуть нашу пользовательскую базу к списку макетирования, а затем ввести запись cron каждый день. Возможности бесконечны, это потрясающая вещь с открытым исходным кодом!

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

Также Pear пакеты:

http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue

рыдать.

PS: НЕ используйте mail () для отправки этих 5000 писем. В дополнение к тому, что все остальные сказали, он крайне неэффективен, поскольку mail () создает отдельный сокет для каждого набора электронной почты, даже в том же MTA.

Также взгляните на класс PHPmailer. PHPMailer

Я уже делал это с помощью Lotus Notus и PHP . Это решение работает, если у вас есть доступ к почтовому серверу или вы можете запросить его у администратора mail server :

1) Создайте группу на mail server : «Отдел продаж».
2) Назначьте group учетные записи, которые должны быть в группе.
3) Назначьте интернет-адрес группе: salesdept@DOMAIN.com.
4) Создайте скрипт PHP, используя функцию почты:
$ to = "salesdept@DOMAIN.com";
mail ($ to, $ subject, $ message, $ headers);

Он работал для меня, и все учетные записи, входящие в группу, получили почту.

Лучшая из них.

Вы можете использовать swiftmailer для этого. Используя пакетный процесс.

 <?php $message = Swift_Message::newInstance() ->setSubject('Let\'s get together today.') ->setFrom(array('myfrom@domain.com' => 'From Me')) ->setBody('Here is the message itself') ->addPart('<b>Test message being sent!!</b>', 'text/html'); $data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error()); while($row = mysql_fetch_assoc($data)) { $message->addTo($row['email'], $row['first'] . ' ' . $row['last']); } $message->batchSend(); ?> 

Зачем беспокоиться о себе? Это блог, просто используйте Google Feedburner, который автоматически подталкивает обновления подписчикам по электронной почте.

Он бесплатный, и он использует инфраструктуру Google . Не может быть лучше. Я использую его для некоторых своих сайтов / блогов, и он работает чудесно.

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