web-dev-qa-db-de.com

Massen-E-Mail senden mit PHP

Ich schreibe gerade einen Musikblog. Der Administrator schreibt alle 2-3 Tage einen neuen Artikel. Sobald der Administrator einen Artikel veröffentlicht, wird sofort eine Massen-E-Mail an rund 5000 Abonnenten gesendet. 

Wie implementiere ich die Massenmail-Funktion am besten?

Funktioniert die folgende Funktion?

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

Eine andere Frage: Wenn alle 5000 Abonnenten Yahoo Mail verwenden, wird Yahoo dann als DDOS-Angriff behandelt und die IP-Adresse meines SMTP-Servers blockiert?

47
Alan

Zunächst einmal ist die Verwendung der mit PHP mitgelieferten mail () - Funktion keine optimale Lösung. Es wird leicht als Spam markiert und Sie müssen den Header einrichten, um sicherzustellen, dass Sie HTML-E-Mails korrekt senden. Ob das Code-Snippet funktionieren wird, würde es tun, aber ich bezweifle, dass Sie HTML-Code richtig darin erhalten, ohne zusätzliche Header anzugeben

Ich schlage vor, Sie werfen einen Blick auf SwiftMailer , das HTML-Unterstützung, Unterstützung für verschiedene MIME-Typen und SMTP-Authentifizierung bietet (was Ihre E-Mail weniger wahrscheinlich als Spam kennzeichnet).

46
Extrakun

Ich würde alle E-Mails in eine Datenbank einfügen (wie eine Warteschlange) und sie dann einzeln wie in Ihrem Code bearbeiten (wenn Sie Swiftmailer oder Phpmailer usw. verwenden möchten, können Sie das auch tun.)

Aktualisieren Sie nach dem Senden jeder E-Mail die Datenbank, um das Datum und die Uhrzeit des Versands aufzuzeichnen.

Wenn Sie sie zuerst in die Datenbank aufnehmen, müssen Sie 

  1. eine Aufzeichnung, an wen Sie es gesendet haben
  2. wenn Ihr Skript eine Zeitüberschreitung hat oder fehlgeschlagen ist und Sie es erneut ausführen müssen, werden Sie die gleiche E-Mail nicht zweimal an andere Benutzer senden
  3. sie können den Sendevorgang von einem Cron-Job aus ausführen und einen Stapelvorgang ausführen, so dass Ihr Mail-Server nicht überfordert wird, und verfolgen, was gesendet wurde

Denken Sie daran, wie zurückgeschickte E-Mails oder ungültige E-Mails automatisch von Ihrer Liste entfernt werden.

Wenn Sie so viele E-Mails senden, werden Sie sicherlich ein paar Sprünge bekommen.

30
bumperbox

Dies ist ein Ratschlag, keine Antwort: Es geht viel besser, wenn Sie spezielle Mailinglisten-Software verwenden. mailman ist ein häufig verwendetes Beispiel, aber etwas so einfaches wie mlmmj kann ausreichen. Das Versenden von Massenmails ist tatsächlich schwieriger, als es tatsächlich scheint. Sie müssen nicht nur die E-Mails versenden, sondern auch "tote" Adressen verfolgen, um zu vermeiden, dass Ihre E-Mails oder, schlimmer, Ihr Mailserver, als Spam markiert werden Grund.

Sie können diese Dinge selbst implementieren, aber insbesondere das Absprunghandling ist schwierig und lohnend. Die Verwendung eines Mailinglisten-Managers macht die Sache wesentlich einfacher.

Wie Sie Ihre Mail für Yahoo schmackhaft machen, ist das eine ganz andere Sache. Trotz all ihrer Fehler scheinen sie SPF und DomainKey große Bedeutung beizumessen. Sie müssen sie wahrscheinlich implementieren, was die Zusammenarbeit Ihres Mail-Server-Administrators erfordert. 

17

Sie können CRON für diese Art der Operation in Betracht ziehen. Das Versenden von Massen-E-Mails gleichzeitig ist sicherlich nicht gut, es kann als Spam, DDS, Serverabsturz usw. erkannt werden. 

CRON könnte also eine großartige Lösung sein. Schicken Sie 100 E-Mails auf einmal ab und warten Sie ein paar Minuten, die nächsten 100 usw.

12
usoban

Senden Sie keine E-Mails an 5.000 Personen mit Standardwerkzeugen PHP. Sie werden in wenigen Sekunden von den meisten ISPs gebannt und wissen es auch nicht. Sie sollten entweder eine Mailinglisten-Software oder einen E-Mail-Diensteanbieter verwenden.

9
Nir Levy

Warum benutzt du nicht lieber phplist ? Es ist auch auf PHP Mailer aufgebaut und wird von vielen Branchenführern verwendet. Ich habe es einige Male selbst verwendet, um Massenmails an meine Kunden zu versenden. Das Schöne an phplist ist, dass Sie Ihre Nachrichten auf Domänenebene plus Zeitlimit drosseln können. 

Was wir auch mit ein paar internen Erfassungssystemen gemacht haben, war, unsere Benutzerbasis zur Mailingliste zu bringen und dann einen cron-Eintrag zu haben, der jeden Tag eine bestimmte Mail auslöst. Die Möglichkeiten sind endlos, das ist das Tolle an Open Source! 

8
Conrad

Auch die Birnenpakete:

http://pear.php.net/package/Mail_Mimehttp://pear.php.net/package/Mailhttp: //pear.php. net/package/Mail_Queue

schluchzen. 

PS: Verwenden Sie NICHT mail (), um diese 5000 E-Mails zu senden. Zusätzlich zu dem, was alle anderen sagten, ist es äußerst ineffizient, da mail () einen separaten Socket pro E-Mail-Satz erstellt, selbst für denselben MTA. 

4
bucabay

Schauen Sie sich auch die PHPmailer-Klasse an. PHPMailer

2
Roland

Sie können swiftmailer dafür verwenden. Durch Batch-Prozess.

<?php
    $message = Swift_Message::newInstance()
      ->setSubject('Let\'s 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();
?>
0
Krishna Ghodke

Ich habe es bereits mit Lotus Notus und PHP gemacht. Diese Lösung funktioniert, wenn Sie Zugriff auf den Mailserver haben oder beim mail server-Administrator etwas anfordern können:

1) Erstellen Sie eine Gruppe im mail server: "Sales Department".
2) Weisen Sie der group die Konten zu, die Sie zur Gruppe benötigen.
3) Weisen Sie der Gruppe eine Internetadresse zu: [email protected]
4) Erstellen Sie Ihr PHP Skript mit der Mail-Funktion:
$ to = "[email protected]";
mail ($ to, $ subject, $ message, $ headers);

Es funktionierte für mich und alle Konten, die in der Gruppe enthalten sind, erhalten die E-Mail.

.__ Das Beste der Glücksbringer.

0
RGA