Kontaktformular
Andy
- php
0 Thomas Luethi0 Götz0 Tom0 Thomas
Hi Ihrs,
ich hätte gerne ein PHP-basiertes Formular, damit ich nicht nicht auf Mailprogramme wie Outlook zurückgreifen muss. Dafür habe ich ein Formular geschrieben, welches die Daten an eine PHP-Datei weitergibt. Dann soll demjenigen eine Bestätigungsmail geschickt werden, der mir eine Nachricht schreibt. Das funktioniert auch. Doch leider kommt die Mail bei mir nicht an. Und wenn ich es doch irgendwie schaffe, dass ich eine Mail vom ausgefüllten Formular bekomme, ist kein Inhalt da (also das, was ins Formular eingegeben wurde). Kann mir irgendjemand helfen. Ich sehe vor lauter Bäume den Wald nicht mehr.
kontakt.php
<form ACTION="sendmail.php" METHOD="GET" name="form1">
<INPUT NAME="termin" TYPE="CHECKBOX">
<INPUT NAME="imagbrosch" TYPE="CHECKBOX">
<INPUT NAME="person" TYPE="TEXT" ROWS=1 COLS=1 SIZE="25" ALIGN=left>
und so weiter...
sendmail.php
<?
$mail="mail@meine_email_adresse.de";
$vtext="Text zur BEstätigung";
$bestaetigung="...Mail angekommen...";
$text=str_replace("\"",""",$text);
$text=str_replace("'","'",$text);
mail($mail,$termin,$imagbrosch,$person,"From: ".$email);
mail($email,$bestaetigung,$vtext,"From: ".$mail);
?>
Sieht hier irgendwer einen Fehler?
Thx
Andy
Hallo,
mail($mail,$termin,$imagbrosch,$person,"From: ".$email);
mail($email,$bestaetigung,$vtext,"From: ".$mail);
Lies mal das Manual zu mail()
http://www.php.net/manual/de/function.mail.php
Achte auf die Position der Parameter.
Tip: Bau Dir _vor_ dem Aufruf der Funktion mail()
den gesamten Inhalt in einem String zusammen.
Dabei kannst Du ja unterscheiden:
$inhalt_an_mich="blabla" . $variable1 . $variable2;
$inhalt_an_absender="Hier ist Ihre Kopie..." . $variable1 . $variable2;
u.s.w.
Statt die Variablen direkt zu verwenden, solltest Du sie
aus $_POST holen.
$person=$_POST['person'];
u.s.w.
Dann funktioniert das Skript auch auf Servern,
wo der Webmaster register_globals=off gesetzt hat.
Statt dem str_replace koenntest Du stripslashes() verwenden.
Um die Strings "sicherer" zu machen, solltest Du
aber \0 und andere boese Zeichen entfernen.
Lies auch:
http://www.dclp-faq.de/ch/ch-webvariablen.html
http://www.dclp-faq.de/q/q-sicherheit-parameter.html
http://www.dclp-faq.de/q/q-formular-register-globals.html
Und nochwas: Gewisse Provider/Mail-Dienste loeschen
Mails, die ueber PHP verschickt wurden, kommentarlos,
wenn die IP-Adresse und die Domain nicht "zusammenpassen".
Poste doch mal einen vollstaendigen Header eines Mails,
das ueber Dein Skript verschickt wurde.
Gruesse,
Thomas
Hallo Andy!
kontakt.php
<form ACTION="sendmail.php" METHOD="GET" name="form1">
Ich wuerde Dir dazu raten, sowas per POST zu machen.
sendmail.php
<?
$mail="mail@meine_email_adresse.de";
$text=str_replace("\"",""",$text);
$text=str_replace("'","'",$text);
Was machst du damit bzw. wozu?
mail($mail,$termin,$imagbrosch,$person,"From: ".$email);
mail($email,$bestaetigung,$vtext,"From: ".$mail);
Irgendwas stoert mich hier.
Beim oberen mail() uebergibst Du eine Variable mehr.
Die Variablen $termin und $imagbrosch und $person sollen ja im Mailtext sein, oder? - So geht das imho nicht.
(Lesetip: http://de3.php.net/manual/en/function.mail.php)
Stelle doch mal das Error-Reporting von PHP hoeher, vielleicht sieht man dann, wo genau der Fehler wirklich liegt.
(Lesetip: http://de3.php.net/error_reporting)
Sieht hier irgendwer einen Fehler?
Also erstmal faellt mir auf, dass Du "direkt" auf die Variablen zugreist.
Inzwischen sollte man in PHP jedoch die Superglobalen-Arrays benutzen, also _GET bzw. _POST (Lesetip: http://de3.php.net/manual/en/language.variables.predefined.php).
MfG
Götz
Hello,
ja, ich sehe eine erhebliche Sicherheitslücke!
kontakt.php
<form ACTION="sendmail.php" METHOD="GET" name="form1">
<INPUT NAME="termin" TYPE="CHECKBOX">
<INPUT NAME="imagbrosch" TYPE="CHECKBOX">
<INPUT NAME="person" TYPE="TEXT" ROWS=1 COLS=1 SIZE="25" ALIGN=left>
und so weiter...
da wird ja cuh irgendwann die email-Adresse abgefragt...
sendmail.php
<?
$mail="mail@meine_email_adresse.de";
$vtext="Text zur BEstätigung";
$bestaetigung="...Mail angekommen...";
$text=str_replace("\"",""",$text);
$text=str_replace("'","'",$text);
mail($mail,$termin,$imagbrosch,$person,"From: ".$email);
und die kommt hier wieder an.
meine adresse: "arsch@loch.de;\n Bcc: ".$ganzeWelt.";\n";
in $ganzeWelt stehen natürlich die hundert Millionen Adressen drin, die ich gerne beglücken würde.
mail($email,$bestaetigung,$vtext,"From: ".$mail);
Müsste so klappen, oder was sagen die Anderen dazu?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
meine adresse: "arsch@loch.de;\n Bcc: ".$ganzeWelt.";\n";
in $ganzeWelt stehen natürlich die hundert Millionen Adressen drin, die ich gerne beglücken würde.mail($email,$bestaetigung,$vtext,"From: ".$mail);
Müsste so klappen, oder was sagen die Anderen dazu?
Eher nicht.
Cc und Bcc muessen - wie andere optionale Header - im
_vierten_ Parameter von mail() stehen.
Kann sein, dass es auf gewissen Servern mit gewissen MTA trotzdem
funktioniert, aber die Regel ist das IMHO nicht.
Gruesse,
Thomas
hi,
meine adresse: "arsch@loch.de;\n Bcc: ".$ganzeWelt.";\n";
in $ganzeWelt stehen natürlich die hundert Millionen Adressen drin, die ich gerne beglücken würde.mail($email,$bestaetigung,$vtext,"From: ".$mail);
Müsste so klappen, oder was sagen die Anderen dazu?Eher nicht.
Cc und Bcc muessen - wie andere optionale Header - im
_vierten_ Parameter von mail() stehen.
Kann sein, dass es auf gewissen Servern mit gewissen MTA trotzdem
funktioniert, aber die Regel ist das IMHO nicht.
er kann aber trotzdem im _ersten_ parameter die emailadressen aus $ganze_welt[] alle durch ein komma getrennt auffuehren - mehrere direkte empfaenger lassen sich auf diese weise im einklang mit der syntax angeben.
gruss,
wahsaga
Hello,
mail($mail,$termin,$imagbrosch,$person,"From: ".$email);
und die kommt hier wieder an.
meine adresse: "arsch@loch.de;\n Bcc: ".$ganzeWelt.";\n";
in $ganzeWelt stehen natürlich die hundert Millionen Adressen drin, die ich gerne beglücken würde.
Bin ICH jetzt blöd, oder könnt Ihr BEIDE nicht gucken? Das "From: ".$email" steht doch im Header-Parameter. Und wo sollte man nun vermuten, wird das "$email" wohl herkemmen? Natürlich aus dem Eingabefeld "Meine emailadresse: <input type="text" name="email" ....>
Oder sehe ich das falsch?
Bin ich der Einzige hier, der ungeposteten Code sehen kann (förmlich riechen kann...)?
Bitte nochmal um Antwort, ich hol mir derweil ein Weizenbier aus dem Kühlschrank.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
Hello,
mail($mail,$termin,$imagbrosch,$person,"From: ".$email);
Bin ich der Einzige hier, der ungeposteten Code sehen kann (förmlich riechen kann...)?
Ok, ok. Wenn ich jetzt die Kommata zähle, steht das "From: $email" im fünften Parameter, was zu einem Fehler führen müsste. Aber es wird bestimmt noch in den vierten vorrücken, wenn hier keiner schreit, dass das gefährlich ist ;-((
Liebe Grüße aus http://www.braunschweig.de
Tom
Ich hab das mal so gemacht, vielleicht hilfts
#$from = Absender $to = Empfänger
$to="an@empfaenger.de;
$subject=$betreff;
$header="From:".$from."<".htmlspecialchars($from).">\n";
$header.="Return-path: eigene@email.de\n";
$header.= "Reply-To:".$from."\n";
$header .= "X-Mailer: PHP/" . phpversion(). "\n";
$header .= "X-Sender-IP: $REMOTE_ADDR\n";
$header .= "Content-Type: text/html";
$message.="Blabla\n";
$message.="Blabla\n";
mail($to,$subject,$message,$header);
Gruß, Thomas