Projekt

Allgemein

Profil

Aktionen

GX-Bug #50672

geschlossen

Newsletter wird nicht an alle Abonnenten verschickt

Von Torben Wark vor etwa 7 Jahren hinzugefügt. Vor mehr als 6 Jahren aktualisiert.

Status:
Erledigt
Priorität:
Normal
Zugewiesen an:
Torben Wark
Kategorie:
Adminbereich
Zielversion:
% erledigt:

100%

Geschätzter Aufwand:
Steps to reproduce:
Betroffene Versionen:
3.3.3.0
Release Notes Langtext:

Newsletter werden wieder an alle Empfänger verschickt


Beschreibung

Meldung von einem Kunden aus dem Forum:

In der aktuellen V3.3.2.0 und mindestens in der V3.3.1.2 (ich habe jetzt nicht geschaut, seit wann das genau durchgeschliffen wird) gibt es ein Problem mit dem Newsletter-Modul.

Kleines Beispiel: 2500 Newsletter-Kunden, über den eMail-Server dürfen nur 250 Mails zeitgleich geschickt werden. Also im Adminbereich unter Kunden->eMails->eMail-Optionen->Maximale Anzahl E-Mails pro Versand genau diese 250 eingestellt.

Das Script zum Senden des Newsletters teilt ja jetzt die zu sendende Anzahl in 250er-Pakete auf und ruft sich mehrmals selber auf. Am Ende scheint alles geklappt zu haben. Aber: Es verschickt statt der 2500 eMail nur die ersten 250. Nachzuvollziehen im eMail-Archiv und in der Datenbank unter module_newsletter_temp_(ID). Dort sind dann auch nur die ersten 250 Einträge mit einem 'send'-Comment versehen.

Also einmal in die /admin/module_newsletter.php geschaut und nach etwas zusätzlichem DEBUG-Code diese Stelle als Problem ausgemacht:

Zeile 288:

for ($i=1;$i<=$max_runtime;$i++)

Ab dem zweiten Aufruf der Datei wird diese Schleife nicht mehr durchlaufen. Grund ist die fehlerhafte Berechnung der Variabel $max_runtime in Zeile 247:

$max_runtime=$limit_up-$limit_low;

Denn diese beiden zugrunde liegenden Variabeln werden aus der

$_GET['send']

geholt, welche sich bei jedem Redirect ändert.

Lösung könnte folgende sein: Beim sql-query werden die Limits ja korrekt gesetzt bei jedem Redirect und somit das Array $email_data korrekt befüllt.

$max_runtime=$limit_up-$limit_low;

durch

$max_runtime = count($email_data);

ersetzen. Das war es dann auch schon. Weitere Änderungen sind nicht nötig.

Noch eine Anmerkung: Es gibt Browser-seitig ein Limit für Redirects. Bei den meisten gängigen Browsern liegt dieses Limit bei 20! Sollte man also z.B. 5000 Newsletter-Abonnenten haben und das Limit auf 200 setzen müssen, dann würde das Script 25(!) Redirects verursachen und der Browser dies mit einer Fehlermeldung quittieren. Dann müsste man bei sich im Browser das Limit bei Bedarf hochsetzen. Vielleicht wäre dies als Warnhinweis im Adminbereich beim Newsletter-Modul nicht verkehrt.


Aktionen

Auch abrufbar als: Atom PDF