[Joomla] FacileForms soll zwei Mails veschicken

Herr Sin

Sternapfel
Registriert
05.01.04
Beiträge
4.990
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]'[email protected]'[/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]'[email protected]'[/COLOR][COLOR=#007700],
    [/COLOR][COLOR=#dd0000]'MeinVorname Mein Nachname'[/COLOR][COLOR=#007700],
    [/COLOR][COLOR=#dd0000]'[email protected]'[/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?
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
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:
...

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?

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).
 

Herr Sin

Sternapfel
Registriert
05.01.04
Beiträge
4.990
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.
 
  • Like
Reaktionen: Hilarious

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Ich habe es selber rausbekommen.

...

Ich glaube wichtig waren die " bei $content_client und nicht '. Aber danke für die angebotene Hilfe.

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.
 

Herr Sin

Sternapfel
Registriert
05.01.04
Beiträge
4.990
... um zu Verhindern, dass der Teilnehmer versucht, das Formular oder dessen Verarbeitung zu korrumpieren.
Danke für die Ausführung. Aber kannst du mir an einem einfachen Beispiel erklären, wie jemand die Verarbeitung korrumpieren kann?
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Danke für die Ausführung. Aber kannst du mir an einem einfachen Beispiel erklären, wie jemand die Verarbeitung korrumpieren kann?

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: [email protected]
Subject: Hallihallohalloechen
From: [email protected]

Ich könnte jetzt dem Betreff statt »Hallihallohalloechen« noch einen Zeilenumbruch, hexadezimal kodiert beifügen und zusätzlich noch die Zeichenkette »Cc: [email protected]«. Daraus würde dann
Code:
To: [email protected]
Subject: Hallihallohalloechen
From: [email protected]
Cc: [email protected]
... 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