Подтвердить что ты не робот

Отправка массовой электронной почты с помощью 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-сервера?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Почему бы вам не использовать phplist? Он также построен на основе PHP Mailer, и многие отраслевые лидеры используют его. Я сам использовал его пару раз для рассылки писем своим клиентам. Преимущество phplist заключается в том, что вы можете регулировать количество сообщений на уровне домена и времени.

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

Ответ 7

Также пакеты 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.

Ответ 8

Также ознакомьтесь с классом PHPmailer. PHPMailer

Ответ 9

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

<?php
    $message = Swift_Message::newInstance()
      ->setSubject('Let\ get together today.')
      ->setFrom(array('[email protected]' => '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();
?>

Ответ 10

Я уже сделал это, используя Lotus Notus и PHP.

Это решение работает, если у вас есть доступ к почтовому серверу или вы можете запросить что-то у администратора mail server:

1) Создайте группу в mail server: Отдел продаж

2) Назначьте group учетные записи, которые должны быть в группе

3) Присвойте интернет-адрес группе: [email protected]

4) Создайте свой PHP-скрипт, используя функцию mail:

$to = "[email protected]";
mail($to, $subject, $message, $headers);



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

Лучшие из удач.

Ответ 11

Существует больше в этом помимо использования программного обеспечения. Если бы вы могли создать почтовую программу, которая отправляет электронную почту на периодической основе. Скажем, если вы отправите 5000 получателей, создайте цикл, который будет отправлять 38 списков за отправку, а затем сделать паузу на 10 секунд. У меня есть реальный опыт отправки 500 вручную за последние недели, и пока у меня хорошие результаты.

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

Mailchimp - моя лучшая рекомендация при отправке подписчику по электронной почте, а НЕ при рассылке нежелательных или холодных рассылок.

Надеюсь, это поможет.

Ответ 12

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

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

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