PHPlist: Mailversand drosseln bei Beschränkungen durch den Provider

Viele Anbieter von Webspace drosseln die Zahl der E-Mails, die innerhalb einer bestimmten Zeitspanne versendet werden dürfen. Kürzlich hatten wir eine Supportanfrage, bei der der Hoster des Kunden nur 450 E-Mails pro Stunde erlaubte. Da Newsletter aber an mehrere tausend Empfänger versendet werden sollten, sorgten die Standardeinstellungen dafür, dass nach knapp 450 E-Mails alle weiteren Sendversuche blockiert wurden und die Mails mit einer Fehlermeldung zurückkamen. Erst nachdem ein neues Zeitintervall angefangen hatte, konnten wieder Mails versendet werden. Die Ursache lag in den Einstellungen für die Drosselung des Mailversandes in PHPlist.  Im Folgenden beschreiben wir, wie man Probleme damit vermeidet.

Es gibt in der config.php drei Parameter, mit deren Hilfe man den zeitlichen Ablauf des Versandes durch PHPlist steuern kann. Diese finden sich ca. ab Zeile 330 und heißen (hier mit ihren Default-Werten):

define("MAILQUEUE_BATCH_SIZE",0);
define("MAILQUEUE_BATCH_PERIOD",100);
define('MAILQUEUE_THROTTLE',0);

Um hier die richtigen Einstellungen zu finden, muss man zunächst entscheiden, ob der Versand via Kommandozeile und Cron-Job erfolgen soll (Fall 1), oder ob PHPlist ihn direkt über den Browser durchführt (Fall 2).

Im ersten Fall wird PHPlist z.B. alle 5 Minuten durch einen Cron-Job aufgerufen. In unserem Beispiel mit einem Limit von 450 Mails pro Stunde würde die Konfiguration dann so aussehen:

define("MAILQUEUE_BATCH_SIZE",420);
define("MAILQUEUE_BATCH_PERIOD",3600);
define('MAILQUEUE_THROTTLE',0);

Die Batch-Size nutzt hier nicht die vollen 450 Mails aus, da es ja vorkommen kann, dass noch weitere Mails versendet werden – durch andere Programme oder auch durch PHPlist selber (z.B. Systemnachrichten). Daher nehmen wir hier einen Sicherheitsabschlag vor. Die Batch-Period setzen wir auf 3600 Sekunden (= 1 Stunde). Bei jedem Aufruf via Cron prüft PHPlist nun, ob das Limit (= die Batch-Size) bereits erreicht wurde, bzw. ob eine neue Periode angefangen hat. Dementsprechend werden dann neue Mails gesendet, bzw. es wird gewartet.

Fall 2 ist etwas schwieriger. Da hier der Versand über den Browser erfolgen soll, muss dieser in periodischen Zeitabständen die PHPlist-Seite neu laden. Das wird aber in der Regel mit den obigen Einstellungen nicht funktionieren, da zwar die ersten 420 Mails sehr schnell gesendet werden, aber die Wartezeit von einer Stunde dazu führt, dass bei der Ausführung von PHPlist die Zeitbegrenzung für PHP-Skripte den erneuten Aufruf verhindert. D.h. die Batch-Period muss kleiner sein und die Zahl der innerhalb dieser Periode versendeten Mails muss verringert werden. Unter Umständen empfiehlt es sich auch, eine kleine Verzögerung zwischen den Versand der einzelnen Mails einzubauen. Hierfür dient der Throttle-Wert. Die Angabe erfolgt ebenfalls in Sekunden, wobei auch Bruchteile möglich sind, z.B. "0.5" für eine halbe Sekunde (Achtung: Der Wert muss mit einem Punkt geschrieben werden, nicht wie in Deutschland üblich mit Dezimalkomma!).

Für unser Beispiel könnte die Konfiguration dann so aussehen:

define("MAILQUEUE_BATCH_SIZE",4);
define("MAILQUEUE_BATCH_PERIOD",33);
define('MAILQUEUE_THROTTLE',0.5);

Mit diesen Einstellungen sendet PHPlist nun vier Mails mit einem Abstand von einer halben Sekunde. Anschließend wird gewartet bis die Batch-Period von 33 Sekunden abgelaufen ist und die nächsten vier Mails werden gesendet. Damit vermeidet man ein Timeout des PHP-Skriptes. Innerhalb der vom Hoster gesetzten Zeitspanne von einer Stunde werden nun ca. 109 Sendevorgänge mit jeweils 4 Mails durchgeführt. Wir können also 436 Mails pro Stunde versenden.

Auf diese Weise vermeidet man übrigens noch ein weiteres Problem, das auf der Empfängerseite liegt: Große Anbieter von Maildiensten wie Yahoo, Googlemail oder Hotmail stufen einen Absender unter Umständen als Spammer ein, wenn sie innerhalb kurzer Zeit sehr viele E-Mails von ihm erhalten, die an Empfänger in ihrer Domain gehen!

Ach ja, noch ein wichtiger Punkt: Wenn man den Mailversand über den Browser laufen lässt, darf man diesen natürlich nicht beenden und sich nicht aus PHPlist ausloggen.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.

Weitere Informationen über Formatierungsoptionen

Mit dem Speichern des Kommentars akzeptieren Sie die Mollom Datenschutzrichtlinie.

Das Team

Martina Ruediger

Martina Rüdiger
(X)HTML/CSS, PHP, Drupal, Wordpress, Konzeption, Design und Umsetzung von modernen Web-Layouts, SEO, Printdesign

 

Jürgen Thau
Kundenberatung, Projektsteuerung, PHP, JavaScript, Drupal, Joomla, Drupal- und Joomla-Schulungen  

Was wir bieten

  • Konzeption und Gestaltung rund um Ihre Web-Seite
  • Online Shops
  • barrierearmes und zukunftssichere Designs
  • Beratung rund um Content-Management
  • maßgefertigte Lösungen
  • ergänzende Angebote aus dem Print-Bereich
  • bedarfsgerechte Web-Hosting-Angebote
  • Schulungen vor Ort
  • Unterstützung nach dem Start Ihrer Web-Seite

Referenzen

Neugierig geworden auf unser Angebot? Schauen Sie doch auch mal in unsere Referenzen rein!

re:publica 12

Gezwitschert ...

  • Sind die Tage von Flash gezählt? "Adobe confirms: no Flash for Chrome on Android" http://t.co/icnRek7r #flash vor 1 Woche 5 Tage
  • Neu im Blog: Flash in Drupal-Inhalte einbinden http://t.co/iuUuE7Wl vor 2 Wochen 6 Stunden

Neueste Kommentare