1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[Joomla] FacileForms soll zwei Mails veschicken

Dieses Thema im Forum "CMS" wurde erstellt von Herr Sin, 30.01.07.

  1. Herr Sin

    Herr Sin Millets Schlotterapfel

    Dabei seit:
    05.01.04
    Beiträge:
    4.752
    Hallo

    Ich nutze Joomla 1.0.12 und FacileForms. Habe soweit mein Formular am laufen. Funktioniert alles. Nur möchte ich, dass der Kunde ebenfalls eine Mail zur Bestätigung bekommt. Das ganze sieht so aus:

    Code:
    [COLOR=#000000][COLOR=#ff8000]// declare globals used in this piece
    [/COLOR][COLOR=#007700]global [/COLOR][COLOR=#0000bb]$mosConfig_mailfrom[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$mosConfig_fromname[/COLOR][COLOR=#007700];
    
    [/COLOR][COLOR=#ff8000]// include FacileForms standard library
    [/COLOR][COLOR=#0000bb]$this[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]execPieceByName[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'ff_InitLib'[/COLOR][COLOR=#007700]);
    
    [/COLOR][COLOR=#ff8000]// ------------------ Mail an Anmelder ------------------
    
    [/COLOR][COLOR=#0000bb]$content_client[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#dd0000]'
    Hallo $cf_vorname $cf_name
    
    Sie haben sich für den Kurs $cf_kurs angemeldet.'[/COLOR][COLOR=#007700];
    
    
    [/COLOR][COLOR=#0000bb]$this[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]sendMail[/COLOR][COLOR=#007700](
        [/COLOR][COLOR=#dd0000]'meine.email@adresse.de'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#dd0000]'MeinVorname Mein Nachname'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#0000bb]ff_getSubmit[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'cf_email'[/COLOR][COLOR=#007700]),
        [/COLOR][COLOR=#0000bb]ff_getSubmit[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'cf_kurs'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#dd0000]' - Kursanmeldung'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#0000bb]$content_client
    [/COLOR][COLOR=#007700]);
    
    
    [/COLOR][COLOR=#ff8000]// ------------------ Mail an mich ------------------
    
    [/COLOR][COLOR=#0000bb]$content_client[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#dd0000]'
    Hallo
    
    Gerade hat sich jemand angemeldet
    
    $cf_vorname $name
    $cf_strasse
    $cf_ort
    Telefon: $cf_telefon
    Fax: $cf_fax
    Emai: $cf_email
    
    $cf_kurs - $cf_gebuehr
    
    $cf_konto
    $cf_blz - $cf_bank
    
    $cf_kommentar'[/COLOR][COLOR=#007700];
    
    
    [/COLOR][COLOR=#0000bb]$this[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]sendMail[/COLOR][COLOR=#007700](
        [/COLOR][COLOR=#dd0000]'meine.email@adresse.de'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#dd0000]'MeinVorname Mein Nachname'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#dd0000]'meine.email@adresse.de'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#0000bb]ff_getSubmit[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'cf_kurs'[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#dd0000]' - Kursanmeldung'[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#0000bb]$content_client
    [/COLOR][COLOR=#007700]);
    
    
    [/COLOR][COLOR=#ff8000]/*--------------------------------------------------------------------
    sendmail(
              von email,
              von name,
              an email,
              betreff,
              inhalt
            );
    --------------------------------------------------------------------*/  [/COLOR][/COLOR]
    Leider bekomme ich in der Mail als Text auch die Variablennamen angezeigt. Da steht also $cf_name anstatt der tatsächliche Name, der eingetragen wurde. Kann mir jemand helfen, wie ich in meinen Mailtext die Forumlardaten bekomme?
     
  2. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Riecht nach einem Bug. Formularverarbeitung würde ich nicht mehr mit einem CMS wie Joomla machen (auch wenn das Tool meine ganze Sympathie genießt). Wie wäre eine ausgelagerte Alternative zum Beispiel gratis mit WUFOO?

    Ich kann Dir eine Formularverarbeitung auch mal fix exemplarisch aufbauen, wenn Du Interesse hast (, aber Joomla, nee, keene Ahnung).
     
  3. Herr Sin

    Herr Sin Millets Schlotterapfel

    Dabei seit:
    05.01.04
    Beiträge:
    4.752
    Ich habe es selber rausbekommen.

    So tut es nicht:
    Code:
    [COLOR=#0000bb]$content_client[/COLOR][COLOR=#007700]=[/COLOR]'
    [LEFT][COLOR=#000000][COLOR=#dd0000] Hallo $cf_vorname $cf_name
    
    Sie haben sich für den Kurs $cf_kurs angemeldet.'[/COLOR][COLOR=#007700];[/COLOR][/COLOR][/LEFT]
    


    Und so tut es:
    Code:
    [COLOR=#0000bb]$vorname   [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]ff_getSubmit[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'cf_vorname'[/COLOR]);
    [LEFT][COLOR=#000000][COLOR=#0000bb]$name      [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]ff_getSubmit[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'cf_name'[/COLOR][COLOR=#007700]);
    [/COLOR][COLOR=#0000bb]$kurs      [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]ff_getSubmit[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'cf_kurs'[/COLOR][COLOR=#007700]);
    
    [/COLOR][COLOR=#0000bb]$content_client[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#dd0000]"
    Hallo $vorname $name
    
    Sie haben sich für den Kurs $kurs angemeldet."[/COLOR][COLOR=#007700];[/COLOR][/COLOR][/LEFT]
    
    Ich glaube wichtig waren die " bei $content_client und nicht '. Aber danke für die angebotene Hilfe.
     
    Hilarious gefällt das.
  4. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Gerne!

    Ich vermute, mit den Anführungszeichen lagst Du völlig richtig. Allerdings hat die Art- und Weise der Zuweisung den Nachteil, dass Du von der korrekten Interpretation von (unsichtbaren) Zeilenumbrüchen abhängig ist. Kaum hast Du diese Datei anders gespeichert oder mal einen Windows-Browser verwendet, kann der Effekt sein, dass plötzlich alles in einer Zeile steht, oder dass zwischen jeder Zeile eine weitere Leerzeile erscheint.

    Daher mein Tipp, die Deklaration mit explizitien Steurezeichen durchzuführen. Das könnte dann so aussehen:
    Code:
    $content_client = "Hallo\n\n";
    $content_client .= "Gerade hat sich jemand angemeldet\n\n";
    $content_client .= sprintf("%s %s\n", strip_tags($cf_vorname), strip_tags($name));
    $content_client .= sprintf("%s\n", strip_tags($cf_strasse));
    $content_client .= sprintf("%s\n", strip_tags($cf_ort));
    $content_client .= sprintf("Telefon: %s\n", strip_tags($cf_telefon));
    $content_client .= sprintf("Fax: %s\n", strip_tags($cf_fax));
    $content_client .= sprintf("E-Mail: %s\n\n", strip_tags($cf_email));
    $content_client .= sprintf("%s - %s\n\n", strip_tags($cf_kurs), strip_tags($cf_gebuehr));
    $content_client .= sprintf("%s\n", strip_tags($cf_konto));
    $content_client .= sprintf("%s - %s\n", strip_tags($cf_blz), strip_tags($cf_bank));
    $content_client .= sprintf("%s\n", wordwrap(strip_tags($cf_kommentar), 72, "\n"));
    
    Das sieht zwar auf den ersten Blick etwas komplexer aus, ist aber ein zusätzlicher Schutz durch die Vorbehandlung der Zeichenketten mit strip_tags() (was auch keine 100%ige Sicherheit bietet, aber doch nahezu), um zu Verhindern, dass der Teilnehmer versucht, das Formular oder dessen Verarbeitung zu korrumpieren.
     
  5. Herr Sin

    Herr Sin Millets Schlotterapfel

    Dabei seit:
    05.01.04
    Beiträge:
    4.752
    Danke für die Ausführung. Aber kannst du mir an einem einfachen Beispiel erklären, wie jemand die Verarbeitung korrumpieren kann?
     
  6. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Es gibt da verschiedene Probleme:

    Zum einen, wenn die vom User eingegebenen Daten auf der Folgeseite wieder angezeigt werden, eventuell weil er ein Eingabefeld nicht ausgefüllt hat und man eine nette Fehlermeldung anzeigen möchte. Gibt man die Daten hier wieder so aus, wie sie der Nutzer eigegeben habe, reicht schon ein "<script>window.open()</script> in einem der Eingabefelder aus, um zu sehen, ob es klappt. Als nächstes könnte ich diese Lücke ausnutzen, um jemand anderem eine spezielle URL per E-Mail zuschicken (am besten mit tinyurl gekürzt). Diese URL habe ich um ein kleines JavaScript erweitert, welches einen unsichtbaren iFrame mit einer Adresse auf meinem Server öffnet. Durch die URL und Dein Formular, welches jetzt die Eingabe wieder anzeigt, wird das Script möglicherweise ausgeführt und ich habe über den iFrame einen Key-Logger beim Benutzer implementiert.

    Bei E-Mails selbst ist es schon schwieriger, aber hier ist das Protokoll ja so angelegt, dass das E-Mail-Versandprogramm (SMTP, zum Beispiel sendmail) Absender, Empfänger, CC-Empfänger, usw. in jeweils eine Zeile schreibt, zum Beispiel so:
    Code:
    To: sin@apfeltalk.de
    Subject: Hallihallohalloechen
    From: teufel@hoelle.de
    
    Ich könnte jetzt dem Betreff statt »Hallihallohalloechen« noch einen Zeilenumbruch, hexadezimal kodiert beifügen und zusätzlich noch die Zeichenkette »Cc: angela@bundeskanzeramt.de«. Daraus würde dann
    Code:
    To: sin@apfeltalk.de
    Subject: Hallihallohalloechen
    From: teufel@hoelle.de
    Cc: angela@bundeskanzeramt.de
    
    ... obwohl Dein Script diese Möglichkeit, CC-Empfänger hinzuzufügen, ja gar nicht vorgesehen hat, habe ich Dein Formular zum Spammen missbraucht. Absender ist dann Dein Server.

    Zum Dritten, falls Du die E-Mails bekommst, und hast den Inhalt nicht irgendwie gefiltert, kann man Dir natürlich eine komplette HTML-Seite mit aktiven Inhalten zuschicken, die bei Dir eventuell für Schaden sorgt. In diesem Bereich kann man selbst als Mac-User nicht vorsichtig genug sein. Meine obige Lösung schützt auch nur ein bisschen, nicht aber gegen Fall zwei (der seltener ist), dafür ist zum Beispiel ein Blick bei SecurePHP hilfreich. Hier ist auch ein schönes Fallbeispiel zu finden.

    Ebenso Gefahr droht bei der Verarbeitung von Formulareingaben zu Datenbanken, Stichwort »SQL-Injection«, aber das führt jetzt schon deutlich zu weit...

    SecurePHP
    strip_tags
    htmlentities
    mysql_real_escape_string
     

Diese Seite empfehlen