FollowUp Responder versendet garnicht/doppelt/mehrfach

PHP Newsletter Software/Script und E-Mail-Marketing Software SuperWebMailer

Moderator: mirko

the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Da hast du natürlich recht, dass die Schreibzugriffe in diesem Fall wichtig wären. Allerdings kann man für jede konstellation einen Weg finden.
Wenn du bei der Installation einmalig die Schreibrechte prüfst, könntest du hier vielleicht sogar eine Konstante setzen (damit die Prüfung auf Schreibrechte nicht bei jedem Request erfolgt). Sollte die Konstante nicht gesetzt sein, könntest du die Prüfung auf DB Ebene machen.

Bei der Installation könntest du sogar einfach eine Datei ausliefern z.B. writeable.inc.php in der der Wert:
<?php

define('isWriteable', false);
?>

gesetzt ist. In der Installation versucht du diese Datei komplett mit "define('isWriteable', true);" zu überschreiben. 2 Fliegen mit einer Klappe ;-)
In der crons Datei wird nur noch nach dem isWriteable gefragt und dementsprechend gehandelt.
Benutzeravatar
mirko
Beiträge: 22869
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von mirko »

ja das mit der Datei hatte ich auch schon überlegt, die Frage ist aber ob man immer in das Verzeichnis als Script auch schreiben darf, wenn das nicht erlaubt ist, dürfte das Cronjob-Script nicht ausgeführt werden.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Das mit den PHP Skripten weiß ich, da ein erneuter Aufruf eine komplett neue Instanz startet. Allerdings arbeiten viele Skripte bei denen es wirklich nur einen Aufruf geben darf auf Filebasis mit .lock Dateien. Man könnte eine Datei im Hauptverzeichnis erstellen z.B. cron.lock In dieser Datei ist der aktuelle Timestamp.

Wird die cronjobdatei gestartet ist die erste Prüfung ob es die cron.lock gibt und ob der darin enthaltene Timestamp schon älter als z.B. 180 Sekunden (Scriptlaufzeit) ist. Bei einem Scriptabbruch würde die Datei existieren bleiben und über diesen Umweg könnte man nach Ablauf von z.B. 180 Sekunden die Datei löschen und einen erneuten Task starten. Am Ende des regulären Cron wäre die letzte Aktion die Datei zu löschen. So hätte man eine rudimentäre Steuerung. Bleibt natürlich fraglich ob die Latenzzeit für den Schreibvorgang der Datei ausreichend ist um einen nahezu gleichzeit aufgerufenen 2. Aufruf der Cronjobdatei zu unterbinden.

Wäre mal interessant was länger dauert ein Zugriff auf die DB oder auf Fileebene um so eine Minidatei zu erstellen.
Benutzeravatar
mirko
Beiträge: 22869
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von mirko »

Ist doch fein, dass es gefunden ist. Natürlich riesen Zufall, dass der doppelte Aufruf wirklich zeitgleich erfolgte, so dass er sich selbst über die Datenbank nicht auf doppelten Start prüfen. Leider gibt es bei PHP-Scripten keine Möglichkeit zu prüfen, ob das Script vielleicht gerade schon ausgeführt wird.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Hallo Mirko,

also Fazit nach einigen Tagen der Beobachtung: Das Problem scheint gelöst. Es war wohl tatsächlich der zusätzliche cronjob der alle 5 min. den minütlichen Cronjob "dazuwischengefunkt" hat. Habe neben der Entfernung des Cronjobs nun auch den E-Mailversand auf 100 Mails gedrosselt und konnte im /eml Ordner nun kein einziges Duplikat mehr finden.....
Auch der Log der SQL Abfrage des cron_furesponders.inc.php zeigte keine doppelten Abfragen.

Es wird wohl wirklich dieser einzelne zusätzliche, gleichzeitige cronaufruf gewesen sein. Jedenfalls passt nun wieder alles.
Danke für die Mühe und Hilfestellung.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Das mit dem Log in der crons.php war schonmal ein sehr guter Tip, hab ich eingebaut und dabei festgestellt, dass tatsächlich ab und zu 2 Zugriffe paralell stattfinden und zwar exakt alle 5 min. Das lag daran, dass ich df.eu damit beauftragt habe einen minütlichen cronjob einzurichten. Gleichzeitig hat aber alle 5 min. der im Backend eingestellte auch noch zusätzlich "gefeuert". Den hab ich jetzt deaktiviert/gelöscht und seitdem kommt nur noch 1x die Minute ein sauberer Aufruf.

Den Log in der cron_furesponders.inc.php bei dem INSERT hab ich nun auch eingebaut, damit ich morgen dort die Querys prüfen kann. Bin mal gespannt.

Ich denke zwar nicht, dass der Cronjob dafür verantwortlich war/ist, da dieser ja auch um 5:00/6:00/7:00/8:00 bereits auch immer doppelt ausgeführt wird.

Dann warten wir mal auf morgen. Die alten EML Dateien lasse ich mal im Ordner, da sich so vielleicht noch andere Gemeinsamkeiten finden könnten.
Benutzeravatar
mirko
Beiträge: 22869
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von mirko »

Die cid-Angaben sind nur gleich, wenn es sich um gleiche E-Mails, also mit gleichen Bildern und Anhängen handelt. Der cached halt die Bilder im codierten Zustand, so dass diese nicht mehrfach codiert werden müssen. Bei gleichen E-Mails geht das schneller und belastet weniger den Server.

Im Ausgangsqueue gibt es keine ungültigen Einträge, außer man löscht z.B. einen Empfänger, dann wird das natürlich beim Versand bemerkt, gibt es einen Fehlereintrag im Ereignisprotokoll. Auf doppelte Einträge prüfen, macht keinen Sinn, die kann es theoretisch nicht geben.

Möglich wäre noch ein Fehler bei den SQL-Abfragen beim Follow-Up-Responder, so dass doppelte Einträge entstehen, glaube ich aber nicht, Empfänger für Empfänger wird durchgegangen und jeder bekommt seine E-Mails. Aber vielleicht durch API-Aufruf irgendein Fehler in der Tabelle, das könnte man mal noch debuggen. Im Script cron_furesponders.inc.php Zeile 379 ist die SQL-Anweisung zum Schreiben in den Ausgangsqueue und die mal alle in eine Textdatei alle speichern lassen, dann müsste man theoretisch doppelte Einträge sehen.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

So, ich hab mir jetzt gerade mal die Mühe gemacht das Thema cid: genauer zu untersuchen anhand der Daten die ich habe.

Bei den 4er Mails sind sowohl die cid als auch die Content-ID entweder 4x komplett verschieden oder in 2x2 gleich (also je 2 Mails haben die gleichen Content-ID bzw. cid).

Bei den einzelnen Mails (also die, die nur 1x an den Kunden verschickt wurden) sind die Content-ID und cid: auch zu 90% unterschiedlich. In nur wenigen Ausnahmen finde ich mal max. 2 E-Mails in denen die IDs gleich sind.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Die Information mit der Message-ID war nur dazu gedacht, dass wir schonmal ausschließen können, dass es sich hierbei um eine 1:1 Kopie handelt (egal wie die entstanden wäre). Das mit der cid werde ich nochmal prüfen, vielleicht liegt hier wirklich der Hund begraben, auch wenn ich nicht weiß woher ein mehrfachaufruf der cron.php kommen soll. Aber auch das lässt sich leicht prüfen. Ich habe meinem Hoster (df.eu) gesagt, sie sollen mir den cronjob auf 1min. einstellen (im Kundencenter ist nur alle 5 min. möglich). Mehr hab ich nicht eingerichtet. Ich könnte in der cron.php ganz oben mal eintragen, dass jeder Aufruf protokolliert wird, ebenfalls mit time() bzw. microtime, so könnten wir ggf. mehrfachaufrufe herausfinden.

Was mir vorher noch aufgefallen ist ALLE doppelten Mails waren beim Versandzeitpunkt 09:00. Es wurden jedoch auch bereits um 5,6,7, und 8 Uhr Leute angeschrieben, alle korrekt und nur 1x. Um 9 Uhr ging was schief. Den Großteil der Leute schicken wir um 8 Uhr an (164) um 9 Uhr sind es lediglich 22 Empfänger die jetzt jedoch 88 E-Mails erhalten haben.

In vorherigen Tagen waren es Leute die um 5:00 Uhr angeschickt wurden. Als auch zeitlich lässt sich das Problem nicht lokalisieren, da ich hier prüfen könnte ob zu diesem Zeitpunkt etwas anderes gemacht wird. Mittlerweile hab ich alle Aufgaben in diesem Zeitraum ausgelagert, also sei es Backuperstellung oder irgendwelche anderen Cronjobs (die nichts mit dem SWM zu tun haben).

Der Cache ist für alle Mails im FollowUp aktiviert. Mehrfachanmeldungen werden nicht zugelassen, weder von der Empfängerliste, noch auf unserer Webseite worüber wir die User per API eintragen.

Ich habe jetzt mal alle Werte zum Versand der Mail auf 50 gestellt. Caching aktiv. In der cron.php werde ich gleich zu beginn einen Schreibvorgang in eine Datei starten, der protokolliert wann die Datei cron.php augerufen wird, denn normalerweise sollte hier nur ein Aufruf pro Minute erfolgen.

Ich kenne leider deine internen Abläufe des SWM nicht, aber wäre es auch möglich auf PHP Basis hier noch eine Sicherheit einzubauen und nicht nur auf DB Basis, sondern ein Prüfscript, welches z.B. die Ausgangswarteschlange prüft auf ungültige (z.B. doppelte Einträge)?
Benutzeravatar
mirko
Beiträge: 22869
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von mirko »

Da stimmt bei den Follow-Up-Respondern etwas in der Datenbank nicht, der schickt nie im Sekundentakt die gleiche E-Mail an den gleichen Empfänger. Alternativ das Script crons.php wird mehrfach aufgerufen und das ganz zufällig auch noch zum genau dem gleichen Zeitpunkt, denn dann wirkt die Sperre über die Options-Tabelle Feld CronJobLock nicht. Über das Feld CronJobLock wird der Mehrfachaufruf abgefangen, wenn das auf 1 steht, wird ein erneuter Aufruf von crons.php sofort beendet.

Die Message-ID ist immer unterschiedlich, das muss laut Internet-Standard so sein. Die Bezeichnung der Teile der E-Mail sind auch unterschiedlich. ABER die Bilder müssen während eines CronJob-Scriptaufrufs immer die gleiche cid-ID haben, außer es wurde die Option "Cache für E-Mail-Versand verwenden" für die Follow-Up-E-Mail deaktiviert.

Sind in der Empfängerliste vielleicht die E-Mail-Adressen mehrfach enthalten, also Duplikate erlaubt?
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Hi Mirko,

danke für die ausführliche Antwort. Hat wunderbar funktioniert. Hab mir gestern dann noch einen schönen Dateinamen zusammengebastelt und mehrfach getest und heute sind die Ergebnisse da. Leider schlimmer als erwartet!

Von täglich ~600 Teilnehmer haben insgesamt 21 Empfänger JE 4 Nachrichten erhalten.
Was natürlich bei diesem Debugging nun toll ist, dass man sieht, dass es IMMER 4 Nachrichten sind. keine 2 oder 3. Immer 4 Stück doppelt.
Der Inhalt unterschiedet sich:

Im Header
- Date: Date: Thu, 16 Jun 2016 09:00:18 +0200 / Date: Thu, 16 Jun 2016 09:00:19 +0200
- Message-Id: <714227f2f865669b37e8a8e73b11459304e908@XXXXXXXXX.de> / <ba13f2537e41833f560f1c5ff7631cad04e908@XXXXXXXXX.de>
- boundary="----=_NextPart_000_93D3_CBC05683.683D4A0F" / boundary="----=_NextPart_000_5586_C4554585.58551CB9"

This is a multi-part message in MIME format.
------=_NextPart_000_93D3_CBC05683.683D4A0F

This is a multi-part message in MIME format.
------=_NextPart_000_5586_C4554585.58551CB9

Und innerhalb des Quelltextes sind es auch z.B. bei Bildverweisen unterschiedliche cid:

Ansonsten ist alles identisch (hab es mir mit einem Diff-Programm angesehen).
Es scheint also, als würde die Mail 4x komplett neu vom System generiert werden und damit in die Warteschlange wandern. Bei allen Empfängern gibt es zum Versand auch je einen Eintrag in der History.

Also ich denke hier fehlt irgendwo eine Kontrollfunktion, denn das System weiß, dass es die Mail 4x generiert hat, da die unterschiedlichen Ids dafür sprechen, ebenso der 4-fach Logeintrag. Hier müsste irgendwo beim Versand ein Filter hin, der jeden Mehrfachversand prüft und ggf. ignoriert, sofern bereits eine E-Mail von diesem User rausgeschickt wurde.


Edit: Interssanterweise steht im FollowUp-Versandprotokoll auch bei den 4-fach Empfängern nur ein Eintrag.....
Benutzeravatar
mirko
Beiträge: 22869
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von mirko »

the_scrat hat geschrieben:Warum soll ich denn bitte die UserID des Admins haben wollen? Damit hätte ich doch 500x die gleiche Zahl. Ich brauch irgendwas, wo ich anhand der Dateien sehen kann, wo die an einen User doppelt rausgegangen sind.
Bei mehreren Admin-Nutzern macht das schon Sinn.
In der cron_sendengine.inc gibt es doch "irgendwie" genau das was ich brauche.....
z.B. $_QlClC["recipients_id"] darin sollte doch die aktuelle ID des Empfängers stehen.

Ist halt grad sehr schwer nachzuvollziehen mit dem Obfuscated Code. Warum wurde der Code überhaupt Obfuscated? Copyrightgeschützt ist die Software doch sowieso.
Das gibt es schon aber das ist keine globale Variable. Das Script mail.php ist auch universal, d.h. es gibt nicht immer die ID eines Empfängers, z.B. für einen Autoresponder ohne Schreiben in die Empfängerliste gibt es diese nicht.


NUR für deine Zwecke, NIEMAND sollte das nachmachen!!, könntest VOR Zeile 96 im Script cron_sendengine.inc.php folgendes einfügen:

$Debugrecipients_id = $_QlClC["recipients_id"];
global $Debugrecipients_id;


Im Script mail.php
VOR $_6J1Lf = tempnam($this->writeEachEmailToDirectory, "EML"); angeben

global $Debugrecipients_id;

und mit $Debugrecipients_id kannst dann den Dateinamen bilden, z.B.

$_6J1Lf = $this->writeEachEmailToDirectory.$Debugrecipients_id.microtime();


Hast du noch eine Idee, woran das also liegen kann, dass beim täglichen Versand des Followup variable Empfänger die gleiche E-Mail mehrfach bekommt und vorallem was man dagegen effektiv tun kann.
Der Mailserver könnte auch noch ein Problem sein, vor Jahren hatte das mal jemand, der hatte die Einstellungen für schnellere Zustellung optimiert und dabei kam es dann zum Mehrfachversand, weil der Server nicht lange genug auf das "OK" des gegnerischen Servers gewartet hat.
Ich hab mich jetzt auch schonmal rumgespielt wegen der DB, aber das ist leider nicht so einfach mit "mal eben exportieren". Bei über 10.000 Tabellen und sehr vielen Daten kann ich hier nicht mal kurz nen Export machen bzw. der Import ist das, was hier mit einer 3MB Testdatei schon ewig gedauert hat.
Ja das kann leider dauern, um das alles zu exportieren und wieder zu importieren, muss man sich viel Zeit nehmen.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Warum soll ich denn bitte die UserID des Admins haben wollen? Damit hätte ich doch 500x die gleiche Zahl. Ich brauch irgendwas, wo ich anhand der Dateien sehen kann, wo die an einen User doppelt rausgegangen sind.

In der cron_sendengine.inc gibt es doch "irgendwie" genau das was ich brauche.....
z.B. $_QlClC["recipients_id"] darin sollte doch die aktuelle ID des Empfängers stehen.

Ist halt grad sehr schwer nachzuvollziehen mit dem Obfuscated Code. Warum wurde der Code überhaupt Obfuscated? Copyrightgeschützt ist die Software doch sowieso.

Hast du noch eine Idee, woran das also liegen kann, dass beim täglichen Versand des Followup variable Empfänger die gleiche E-Mail mehrfach bekommt und vorallem was man dagegen effektiv tun kann.

Ich hab mich jetzt auch schonmal rumgespielt wegen der DB, aber das ist leider nicht so einfach mit "mal eben exportieren". Bei über 10.000 Tabellen und sehr vielen Daten kann ich hier nicht mal kurz nen Export machen bzw. der Import ist das, was hier mit einer 3MB Testdatei schon ewig gedauert hat.
Benutzeravatar
mirko
Beiträge: 22869
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von mirko »

ich dachte, der Admin-Nutzer. Die User-Id des Empfängers geht nicht, das noch aus dem Header der E-Mail rauszuparsen, ist zu aufwändig.
the_scrat
Beiträge: 141
Registriert: 07.09.2010, 16:20

Re: FollowUp Responder versendet garnicht/doppelt/mehrfach

Beitrag von the_scrat »

Wir haben nur einen Nutzer im System und das ist der Admin. Der Adminnutzer hat alle Listen erstellt, sei es Empfängerlisten oder auch Followupresponder. Die UserID ist für mich die ID des Empfängers, denn die interessiert mich. Die müsste bei jeder E-Mail anders sein.

Ist die $UserId die ID des Empfängers, oder die des Backendusers? Ich brauch die ID des Emfpängers, alles andere macht ja sonst keinen Sinn ;-)
Antworten