Frage

Ich schreibe gerade einen Musikblog. Der Administrator veröffentlicht 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.

Was ist der beste Weg, um die Mass -Mail -Funktion zu implementieren?

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, behandelt Yahoo es als DDOS -Angriff und blockiert die IP -Adresse meines SMTP -Servers?

War es hilfreich?

Lösung

Zunächst einmal ist die Verwendung der mit PHP gelieferten E -Mail () -Funktion keine optimale Lösung. Es ist leicht als Spamm zu markieren und Sie müssen den Header einrichten, um sicherzustellen, dass Sie HTML -E -Mails korrekt senden. Ob das Code -Snippet funktionieren wird, würde dies jedoch bezweifeln, dass Sie HTML -Code korrekt ohne ihn erhalten werden zusätzliche Header angeben

Ich werde vorschlagen, dass Sie sich ansehen Swiftmailer, mit HTML -Unterstützung, Unterstützung für verschiedene MIME -Typen und SMTP -Authentifizierung (die Ihre E -Mail weniger als Spam markiert).

Andere Tipps

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

Aktualisieren Sie nach dem Senden jeder E -Mail die Datenbank, um das Datum/die Uhrzeit, die sie gesendet wurden, aufzuzeichnen.

Indem Sie sie zuerst in die Datenbank legen, haben Sie

  1. eine Aufzeichnung darüber, an wen Sie es geschickt haben
  2. Wenn Ihr Skript ausfällt oder fehlschlägt und Sie es noch einmal ausführen müssen, senden Sie nicht die gleiche E -Mail an Personen zweimal an Personen
  3. Sie können den Sendeprozess von einem Cron -Job ausführen und jeweils eine Stapel durchführen, damit Ihr Mailserver nicht überwältigt ist, und verfolgen, was gesendet wurde

Beachten Sie, wie Sie abspritzte E -Mails oder ungültige E -Mails automatisieren, damit diese automatisch aus Ihrer Liste entfernt werden können.

Wenn Sie so viele E -Mails senden, müssen Sie ein paar Bounces erhalten.

Dies ist Ratschläge, keine Antwort: Sie sind viel besser, wenn Sie eine dedizierte Mailinglisten -Software verwenden. Briefträger ist ein oft verwendetes Beispiel, aber etwas so Einfaches wie mlmmj kann ausreichen. Das Senden von Massenposts ist tatsächlich eine schwierigere Aufgabe als tatsächlich zu sein scheint. Sie müssen nicht nur die E -Mails senden, sondern müssen auch "tote" Adressen im Auge behalten, um Ihre Mail oder schlimmer noch Ihren MailServer als Spam zu markieren. Sie müssen sich aus dem gleichen Grund nicht abmelden.

Sie können diese Dinge selbst implementieren, aber insbesondere die Absprunghandhabung ist schwierig und unbelohnende Arbeit. Wenn Sie einen Mailing -List -Manager verwenden, wird es viel einfacher.

Wie Sie Ihre Post für Yahoo schmackhaft machen können, ist dies eine andere Sache. Trotz all seiner Fehler scheinen sie großartige Aktien einzugeben Spf und Domainkey. Sie müssen sie wahrscheinlich implementieren, was eine Zusammenarbeit von Ihrem E-Mail-Server-Administrator erfordert.

Sie können in Betracht ziehen, Cron für diese Art von Operation zu verwenden. Das Senden von Massenpost sofort ist sicherlich nicht gut, es kann als Spam, DDOs, abstürzen Sie Ihren Server usw. erkannt.

Cron könnte also eine großartige Lösung sein, 100 Mails gleichzeitig senden und dann einige Minuten, nächste 100 usw. warten.

Unterlassen Sie Senden Sie E -Mail an 5.000 Personen mit Standard -PHP -Tools. Sie werden in Sekundenschnelle von den meisten ISPs verboten und wissen es nie. Sie sollten entweder einige Mailinglisten -Software oder eine verwenden E -Mail -Dienstanbieter Tun Sie dazu.

Warum benutzt du es nicht lieber? Phplist? Es basiert auch auf PHP Mailer und viele Branchenführer verwenden es. Ich habe es ein paar Mal selbst benutzt, um meine Kunden zu schicken. Das Schöne an Phplist ist, dass Sie Ihre Nachrichten auf einer Domänenebene plus ein Zeitlimitniveau drosseln können.

Wir haben auch mit ein paar internen Capture -Systemen gemacht, die wir haben, war, unsere Benutzerbasis auf die Mailling -Liste zu bringen und dann einen Cron -Eintrag zu haben, der jeden Tag eine bestimmte E -Mail auslöst. Die Möglichkeiten sind endlos, das ist das großartige an Open Source!

Auch die Birnenpakete:

http://pear.php.net/package/mail_mime http://pear.php.net/package/mail http://pear.php.net/package/mail_queue

Schluchzen.

PS: Verwenden Sie keine Mail (), um diese 5000 E -Mails zu senden. Zusätzlich zu dem, was alle anderen gesagt haben, ist es äußerst ineffizient, da mail () auch einen separaten Socket pro E -Mail -Set erstellt, selbst an denselben MTA.

Schauen Sie sich auch die Phpmailer -Klasse an. Phpmailer

Ich habe es schon benutzt Lotus Notus und PHP. Diese Lösung funktioniert, wenn Sie Zugriff auf den Mailserver haben oder etwas an die Anfrage an den mail server Administrator:

1) Erstellen Sie eine Gruppe in der mail server: "Verkaufsabteilung".
2) dem zuordnen group Die Konten, die Sie in der Gruppe sein müssen.
3) Weisen Sie der Gruppe eine Internetadresse zu: salesdept@domain.com.
4) Erstellen Sie Ihr PHP -Skript mit der E -Mail -Funktion:
$ to = "salesdept@domain.com";
Mail ($ to, $ Betreff, $ message, $ heeps);

Es hat für mich funktioniert und alle in der Gruppe enthaltenen Konten erhalten die Post.

Das Beste der Luke.

Sie können Swiftmailer dafür verwenden. Durch Verwendung des Batch -Prozesss.

<?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();
?>

Warum sich selbst stören? Es ist ein Blog, benutze nur Google Feedburner Dies wird automatisch Aktualisierungen an Abonnenten per E -Mail übertragen.

Es ist frei Und es verwendet Googles Infrastruktur. Ich kann nicht besser werden. Ich benutze es für einige meiner Websites / Blogs und es funktioniert wunderbar.

Nachteil ist es nicht scheinen aktiv entwickelt zu sein und nicht unterstützt mehr. Ich würde vorschlagen, dass Sie die Stirn auf eine kommerzielle E -Mail -Liste runzeln, wenn Sie Ihr Geschäft ernst meinen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top