Modul Autoresponder für eMail Workshop

Gesperrt
gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Modul Autoresponder für eMail Workshop

Beitrag von gummibaerle »

Wir haben für einen Kunden ein neues Modul erstellt. Trägt sich ein Kunde in den Newsletter ein, erhält er noch eine zusätzliche eMail (Double-Opt-In) um sich für einen 5-tägigen eMail-Workshop anzumelden. Bestätigt der Kunde, dass er teilnehmen möchte, landet er per Hyperlink auf der Bestätigungsseite die folgendes Modul beinhaltet:

Code: Alles auswählen

<?php
   $pfad="upload/emailkurs/"."CMS_VALUE[0]";

   $kursanmeldung=fopen($pfad.'/emailkursanmeldung.txt','r');
   
   $starttag=intval(floor(time()/(24*3600)));
   $usermail=trim($_GET['m']);
   $username=ereg_replace("_", " ", trim($_GET['u']));
   $username=ereg_replace("ä", "ä", $username);
   $username=ereg_replace("ö", "ö", $username);
   $username=ereg_replace("ü", "ü", $username);
   $username=ereg_replace("Ä", "Ä", $username);
   $username=ereg_replace("Ö", "Ö", $username);
   $username=ereg_replace("Ü", "Ü", $username);
   $username=ereg_replace("ß", "ß", $username);
   $kursname=trim($_GET['k']);
   $kursid=intval(substr($kursname,2,4));

   $flag="false";
   do {
      if ($usermail==trim(fgets($kursanmeldung)) && $flag=="false")
         {
         $flag="true";
         $kursteilnehmer=fopen($pfad.'/emailkursteilnehmer.txt','a+');
         fwrite($kursteilnehmer,"$kursid-$starttag~$usermail~$username\r\n");
         fclose($kursteilnehmer);
         break;
         }
      } 
   while (!feof($kursanmeldung) && $flag=="false");
   fclose($kursanmeldung);
?>
k=Kursname, m=Mailadresse und u=Username. Das Modul schreibt in eine Textdatei dann folgende Informationen: "101-13606~mail@domain.net~Wolfgang Kundler". Die Datei "emailkursanmeldung.txt" beinhaltet nur die eMail-Adresse. Erst wenn ein Kunde die Anmeldung per Mausklick in der eMail bestätigt, landen die Informationen in der Datei "emailkursteilnehmer.txt".

Es funktioniert eigentlich alles perfekt bis auf die Tatsache, dass jede Anmeldebestätigung drei Zeileneinträge liefert. Eigentlich sollte die Schleife nach dem ersten erkennen stoppen, trägt aber dennoch jede Anmeldebestätigung dreimal ein. Dann bekommen die User natürlich auch drei eMails. Sehr ärgerlich! Keine Ahnung warum? Sieht jemand wo das Problem liegt?

Anschauen und testen kann man das ganze hier.

Gruss aus Bayern
Zuletzt geändert von gummibaerle am Mi 18. Apr 2007, 01:30, insgesamt 2-mal geändert.
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."
maveric2001
Beiträge: 112
Registriert: Mi 21. Jun 2006, 07:00
Wohnort: Nordhausen
Kontaktdaten:

Beitrag von maveric2001 »

auf den ersten blick seh ich auch nix, aber wozu brauchst du $flag wenn du break verwendest? zumal ich micht echten true und false gearbeitet haette
gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Beitrag von gummibaerle »

Wenn es ohne geht ist mir das auch Recht. Das Problem ist nur es geht weder mit noch ohne "break" und "flag". Es stehen in der emailkursteilnehmer.txt einfach immer alle Einträge dreimal (identisch) drin:
101-13614~mail@domain.com~Vorname Nachname
101-13614~mail@domain.com~Vorname Nachname
101-13614~mail@domain.com~Vorname Nachname
Er scheint wohl Probleme mit der Schreibanweisung zu haben, denn er durchläuft die Schleife tatsächlich nur ein einziges Mal. Etwas besser funktioniert es, wenn der neue Eintrag in der ersten Zeile erscheint, jedoch wird dann auch der ersten Zeileneintrag überschrieben.

Bei der Gelegenheit, wie setzt man den eigentlich echtes true und false?

Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."
maveric2001
Beiträge: 112
Registriert: Mi 21. Jun 2006, 07:00
Wohnort: Nordhausen
Kontaktdaten:

Beitrag von maveric2001 »

gummibaerle hat geschrieben: Er scheint wohl Probleme mit der Schreibanweisung zu haben, denn er durchläuft die Schleife tatsächlich nur ein einziges Mal. Etwas besser funktioniert es, wenn der neue Eintrag in der ersten Zeile erscheint, jedoch wird dann auch der ersten Zeileneintrag überschrieben.
das heisst wenn du ein echo machst geht er nach dem finden und schreiben aus der while raus?
und geht auch nur beim finden des useremail in den if-zweig?

um ehrlich zu sein ich wuerde das auch proben muessen
gummibaerle hat geschrieben:Bei der Gelegenheit, wie setzt man den eigentlich echtes true und false?
na

Code: Alles auswählen

$flag= true;
:wink:
gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Beitrag von gummibaerle »

maveric2001 hat geschrieben:das heisst wenn du ein echo machst geht er nach dem finden und schreiben aus der while raus? und geht auch nur beim finden des useremail in den if-zweig?
Ja genau. Ich habe eben zur Sicherheit kurz einen echo eingebaut. Das Ergebnis sieht dann so aus:

Newsletter Handler liefert:
Bestätigung der eMail-Kursanmeldung

eMail-Workshop

Vielen Dank für Ihre Anmeldung zu diesem 5-tägigen eMail-Kurs. In den nächsten fünf Tagen erhalten Sie von uns immer morgens um ca. 9:15 Uhr eine eMail mit den neuen Kursinhalten.

Gruss aus Bayern
Online-Team der Lernplattform

Ich bin hier!

Er durchläuft die Schleife also tatsächlich nur einmal, schreibt allerdings den Kursteilnehmer dreimal rein.

Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."
maveric2001
Beiträge: 112
Registriert: Mi 21. Jun 2006, 07:00
Wohnort: Nordhausen
Kontaktdaten:

Beitrag von maveric2001 »

kann jetzt nur mal vorschlagen, den txt vorher in eine var zu saven, zu echo´n und dann die var zu schreiben
gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Beitrag von gummibaerle »

Hatte ich auch schon getestet und eben auch nochmal. Das witzige dabei ist, dann schreibt er alles "nur noch" zweimal in die Textdatei. Aber immerhin eine Verbesserung um 33 %!

Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."
wosch

Beitrag von wosch »

Hallo gummibaerle,

es wäre schön wenn es komplett läuft das du es hier mit einer kurzen Beschreibung posten würdest.
Ich hätte nämlich großes interesse an dem Modul. :wink:
gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Beitrag von gummibaerle »

So geht es:

Code: Alles auswählen

<?php
   $pfad="upload/emailkurs/CMS_VALUE[0]/";
   $kursanmeldung=fopen($pfad."emailkursanmeldung.txt","r");
   $kursteilnehmer=fopen($pfad."emailkursteilnehmer.txt","a");

   $starttag=intval(floor(time()/(24*3600)));
   $usermail=trim($_GET["m"]);
   $username=ereg_replace("_", " ", trim($_GET["u"]));
   $kursname=trim($_GET["k"]);
   $kursid=intval(substr($kursname,2,4));

   $allezeilen=file($pfad."emailkursanmeldung.txt");
   foreach ($allezeilen as $line => $zeile)
      if ($usermail==trim($zeile))
         {
          fputs($kursteilnehmer,"$kursid-$starttag~$usermail~$username\n");
          break;
         }

   fclose($kursanmeldung);
   fclose($kursteilnehmer);
?>
Wenn man den Quellcode des Moduls auf das wesentliche beschränkt, dann ist er fast selbst erklärend. Ansonsten sind noch folgende Anpassungen zu erledigen:

1) Es gibt einen eigenen Cronjob der jeden Tag um 09:30 folgendes Skript startet "/usr/sbin/emailkurs.php". Das bewirkt folgende Schritte:
- Kopiert alle TXT-Dateien aus dem Ordner von "/httpdocs/cms/upload/emailkurs/" nach "/usr/sbin/emailkurs/" (root) und versendet in den ersten fünf Tagen eine eMail an emailkursteilnehmer.txt

2) Der Ordner "/httpdocs/cms/upload/emailkurs/" beinhaltet die Dateien
* emailkursanmeldung.txt - Angemeldete aber noch nicht bestätigte Teilnehmer
* emailkursteilnehmer.txt - Gemäß Double-Opt-In angemeldete und bestätigte Teilnehmer
* 101-htmlnachricht-tag01.txt - HTML-Nachricht von Tag 1 für die KursID 101, 101-htmlnachricht-tag02.txt - HTML-Nachricht von Tag 2 für die KursID 101, usw.

3) Es sind drei neue Templates vorhanden:
- eMailkurs 1 Anmeldung: Beinhaltet Modul "Newsletter Form eMailkurs"
- eMailkurs 2 Handler+Kurs: Beinhaltet leicht modifiziertes Modul "Newsletter Handler+Kurs"
- eMailkurs 3 Bestätigung: Beinhaltet Modul "eMailkurs Bestätigung"

4) HTML-eMails versendet man so:
$htmlheaders = "From: emailkurs@lernplattform.eu \r\n";
$htmlheaders.= "Content-Type: text/html; charset=UTF-8 ";
$htmlheaders.= "MIME-Version: 1.0 ";
$htmlnachricht="Hallo ...";
mail($mailempfaenger,$betreffzeile,$htmlnachricht5,$htmlheaders);

5) Modulanpassungen:
- Newsletter Form eMailkurs: Nur neues Modul-Template 'emailkurs.html' und extra Feldname:
- eMailkurs Bestätigung: Schreibt in die Datei emailkursteilnehmer.txt folgende Informationen "$kursid-$starttag~$usermail~$username",
z.B. "101-13606~kundler@wallaby.de~Wolfgang Kundler"

6) emailkurs.html (Kopie von newsletter.html)
Modul-Template liefert zusätzliches Feld {KURSNAME}. Falls mehrere Kurse angelegt werden, müssen hier extra Zeilen angelegt werden.
<option value="ID102-zweiter-kurs" selected="selected">Kurs-ID 102: &laquo;Zweiter Kurs&raquo;</option>

7) Feldname: {KURSNAME}
$tpl->set('s', 'KURSNAME', mi18n("Kursname")); in Modul "Newsletter Form eMailkurs"

Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."
Gesperrt