Отправка массовой электронной почты с использованием 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-сервера?
11 ответов
Во-первых, использование функции mail(), поставляемой с PHP, не является оптимальным решением. Он легко помечается как спам, и вам нужно настроить заголовок, чтобы убедиться, что вы отправляете электронные письма HTML правильно. Что касается того, будет ли работать фрагмент кода, он будет работать, но я сомневаюсь, что вы получите HTML-код внутри него правильно, без указания дополнительных заголовков.
Я предлагаю вам взглянуть на SwiftMailer, который имеет поддержку HTML, поддержку различных типов mime и аутентификацию SMTP (которая с меньшей вероятностью пометит вашу почту как спам).
Я вставляю все электронные письма в базу данных (вроде как очередь), а затем обрабатываю их по одному, как вы это делали в своем коде (если вы хотите использовать swiftmailer или phpmailer и т. Д., Вы можете сделать это тоже).
После отправки каждого письма обновите базу данных, чтобы записать дату / время отправки.
Поместив их в базу данных сначала у вас есть
- запись о том, кому вы отправили
- если ваш сценарий истекает или завершается неудачей, и вам нужно запустить его снова, то вы не будете в конечном итоге рассылать одно и то же письмо людям дважды
- вы можете запускать процесс отправки из задания cron и делать пакет за раз, чтобы ваш почтовый сервер не перегружался, и отслеживать то, что было отправлено
Имейте в виду, как автоматизировать отклоненные или недействительные письма, чтобы они могли автоматически удаляться из вашего списка.
Если вы отправляете так много электронных писем, вы обязательно получите несколько отскоков.
Это совет, а не ответ: вам гораздо лучше пользоваться специальным программным обеспечением для рассылки. mailman - это часто используемый пример, но может быть достаточно чего-то простого, например mlmmj. Отправка массовых писем на самом деле является более сложной задачей, чем кажется. Вам нужно не только отправлять письма, но и отслеживать "мертвые" адреса, чтобы избежать того, что ваша почта или, что еще хуже, ваш почтовый сервер помечается как спам. Вы должны обращаться с людьми, отказавшимися от подписки, по той же причине.
Вы можете реализовать эти вещи самостоятельно, но, в частности, обработка отказов - сложная и невыгодная работа. Использование менеджера списка рассылки значительно упростит задачу.
Что касается того, как сделать вашу почту приятной для Yahoo, это совсем другой вопрос. При всех своих недостатках они, кажется, вносят большой вклад в SPF и DomainKey. Вам, вероятно, придется реализовать их, что потребует сотрудничества с администратором вашего почтового сервера.
Вы можете рассмотреть возможность использования CRON для такого рода операций. Одновременная отправка массовой почты, безусловно, не годится, это может быть обнаружено как спам, ddos, сбой вашего сервера и т. Д.
Таким образом, CRON может быть отличным решением: отправить 100 писем одновременно, затем подождать несколько минут, следующие 100 и т. Д.
Не отправляйте электронную почту 5000 человек, используя стандартные инструменты PHP. Большинство интернет-провайдеров забанят вас за считанные секунды, и вы даже не узнаете об этом. Вы должны использовать какое-либо программное обеспечение для списков рассылки или поставщика услуг электронной почты.
Почему бы вам не использовать phplist? Он также построен на основе PHP Mailer, и многие отраслевые лидеры используют его. Я сам использовал его пару раз для рассылки писем своим клиентам. Преимущество phplist заключается в том, что вы можете регулировать количество сообщений на уровне домена и времени.
То, что мы также сделали с парой внутренних систем захвата, которые мы получили, это подтолкнули нашу пользовательскую базу к списку рассылки, а затем создали запись cron, запускающую определенную почту каждый день. Возможности бесконечны, это удивительная вещь с открытым исходным кодом!
Также пакеты Груша:
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.
Вы можете использовать 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();
?>
Я уже сделал это с помощью Lotus Notus
а также PHP
, Это решение работает, если у вас есть доступ к почтовому серверу или вы можете запросить что-то mail server
Администратор:
1) Создать группу в mail server
: "Отдел продаж".
2) Назначить group
учетные записи, которые вы должны быть в группе.
3) Присвойте интернет-адрес группе: salesdept@DOMAIN.com.
4) Создайте свой PHP-скрипт, используя функцию mail:
$ to = "salesdept@DOMAIN.com";
mail ($ to, $ subject, $ message, $ headers);
Это сработало для меня, и все учетные записи, входящие в группу, получают почту.
Лучшие из удач.
Это не только использование программного обеспечения. Если бы вы могли создать программу массовой рассылки, которая отправляет с перерывами. Скажем, если вы отправите 5000 получателей, создайте цикл, который будет отправлять 38 списков за отправку, а затем сделайте паузу на 10 секунд. У меня есть реальный опыт отправки 500 вручную в день в течение последних недель, и пока у меня хорошие результаты.
Еще одно соображение - это содержание вашего электронного письма. В настоящее время это стандарт, когда вам нужно указать свой физический адрес офиса и отказаться от подписки. Это факторы, которые проверяет большинство серверов электронной почты получателей. Если у вас их нет, они будут классифицировать вас как спамера.
Mailchimp - это моя лучшая рекомендация, если вы хотите, чтобы поставщик платных услуг отправлял вашему подписчику электронной почты НЕ рассылку нежелательных или холодных электронных писем.
Надеюсь, это поможет.
Зачем самим программировать? Это блог, просто используйте Google Feedburner, который автоматически отправляет обновления подписчикам по электронной почте.
Это бесплатно и использует инфраструктуру Google. Не может быть лучше, чем это. Я использую его для некоторых своих сайтов / блогов, и он прекрасно работает.
Недостатком является то, что он , похоже, активно не разрабатывается и больше не поддерживается. Я бы посоветовал вам отказаться от коммерческого списка рассылки, если вы серьезно относитесь к своему бизнесу.