Zur Navigation

Kontaktformular - Mail-Ausgabe

1 Moni

Hallo Zusammen,

ich habe mich mal an ein Kontaktformular rangetraut...

es funktioniert so weit auch alles wunderbar aber wie bekomme ich es hin
dass in der Mail an mich die Vollständigen Adressdaten mit der Nachricht drinstehen?

[Edit Jörg: URL zu unsicherem Kontaktformular herausgenommen]

07.09.2009 10:35 | geändert von Jörg: 07.09.2009 11:33

2 Jörg Kruse

Hallo Moni,

um da etwas zu sagen zu können, muss man den PHP-Quellcode von index.php kennen.

07.09.2009 10:55

3 Moni

Hallo Jörg,

sorry, den habe ich glatt vergessen....



<html>
<head>
<title>Kontaktformular</title>
<meta name="author" content="m">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div align="center">
<br><br>
<?php
include "config.php";
              
 
if(isset($_POST["submit"]))
{
              

if(!$_POST["name"] || empty($_POST["name"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Name.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }
           

elseif(!$_POST["email"] || empty($_POST["email"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: E-Mail.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }


if(!$_POST["telefon"] || empty($_POST["telefon"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Telefon.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }


elseif(!$_POST["betreff"] || empty($_POST["betreff"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Betreff.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }
              

elseif(!$_POST["nachricht"] || empty($_POST["nachricht"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Nachricht.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }
           

else
{
              
                              
                 
$header.="From: \"".$_POST["name"]."\" <".$_POST["email"].">\n";


                 
$header.="Organization: ".substr($deinemailadresse,strpos($deinemailadresse,"@"))."\n";
                
$header.="Content-Type: text/plain;\n";

$header.="X-Mailer: PHP/".phpversion();

		      


$nachricht1 = "".$_POST["nachricht"]."\n\n";

                                

mail("\"".$deinname."\" <".$deinemailadresse.">",$betreff,$nachricht1, $header);

              

$betreff_danke = "Vielen Dank";

              

$body_danke = "Hallo ".$_POST["name"].",\n\nDanke für Ihre Anfrage!\n\nIhre Anfrage wird schnellstmöglich bearbeitet .\n\n\nMit freundlichen Gruessen\n\n".$deinname."\n\n--\n\nIhre Nachricht:\n\n".$nachricht1."";


             

$header_danke.="\"".$deinname."\" <".$deinemailadresse.">";
$header_danke.="Organization: ".substr($deinemailadresse,strpos($deinemailadresse,"@"))."\n";
$header_danke.="Content-Type: text/plain;\n";
$header_danke.="X-Mailer: PHP/".phpversion();
             

 mail("\"".$_POST["name"]."\" <".$_POST["email"].">",$betreff_danke,$body_danke,$header_danke);
?>

<table border="0"><tr><td colspan="2" align="left">
<span class="mail">Vielen Dank für folgende Nachricht</span></td></tr>
<tr><td colspan="2" align="center">&nbsp;</td></tr>
<tr><td><span class="mail">Name:</span></td><td><?php echo $_POST["name"]; ?></td></tr>
<tr><td><span class="mail">eMail-Adresse:</span></td><td><a href="mailto:<?php echo $_POST["email"]; ?>"><?php echo $_POST["email"]; ?></a></td></tr>

<?php } ?>
<tr><td valign="top" class="mail">Ihre Nachricht:</b></td>
<td><?php echo nl2br($_POST["nachricht"]); ?></td></tr><tr>
<tr><td colspan="2" align="center">&nbsp;</td></tr>
<td colspan="2" align="center"><span class="mail">Eine Best&auml;tigungs-eMail von uns ist bereits unterwegs!</span></td>
</tr></table>
<?php
 } 
              

else
{
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<table border="0" cellspacing="0" cellpadding="5">
<tr>
<td>Firma:</td>
<td><input name="firma" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>Name*:</td>
<td><input name="name" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>Strasse:</td>
<td><input name="strasse" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>PLZ:</td>
<td><input name="plz" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>Ort:</td>
<td><input name="ort" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>E-Mail*:</td>
<td><input name="email" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>Telefon*:</td>
<td><input name="telefon" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>Fax:</td>
<td><input name="fax" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td>Betreff*:</td>
<td><input name="betreff" type="text" class="formular" size="49"></td>
</tr>
<tr>
<td valign="top">Nachricht*:</td>
<td><textarea name="nachricht" cols="50" rows="5" class="feld"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left"><input type="reset" value="zurücksetzen" class="formular">&nbsp;<input type="submit" value="abschicken" name="submit" class="formular"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left">F&uuml;r eine korrekte Abwicklung geben Sie bitte Ihre vollst&auml;ndigen Daten an.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left">*-Felder sind Pflichtfelder.</td>
</tr>
</table>
</form>
<!-- end nicht gesendet -->
<?php } ?>
</div>
</body>
</html>

07.09.2009 11:05

4 Jörg Kruse

Wichtig: du solltest das Formular vorläufig vom Netz nehmen oder mit einem Zugangsschutz versehen, da es nicht gegen E-Mail-Injektion gesichert ist und so als Spamschleuder missbraucht werden kann.

Zu den Einzelheiten, wie man das Formular richtig absichert und zu deiner Eingangsfrage werde ich später noch was schreiben

07.09.2009 11:32

5 Moni

Hallo Jörg,

ok, Danke mache ich gleich.

07.09.2009 11:35

6 Jörg Kruse

An diesen Stellen werden Usereingaben ungefiltert in die Emailheader eingefügt:

$header.="From: \"".$_POST["name"]."\" <".$_POST["email"].">\n";

 mail("\"".$_POST["name"]."\" <".$_POST["email"].">",$betreff_danke,$body_danke,$header_danke);

Das ist sehr gefährlich, da über Zeilenumbrüche weitere Header eingefügt werden können, z.B. ein BCC-Feld mit ein paar Hundert weiteren Empfängern. Absichern kannst du das Formular, indem du alle für die Emailheader relevanten Eingaben auf Umbrüche ("\n" und " \r") überprüfst, und im Fall des Falles mit einer Fehlermeldung abbrichst, z.B.:

if (strpos($_POST['name'], "\n") !== false ||  strpos($_POST['name'], "\r") !== false ||  strpos($_POST['email'], "\n") !== false ||  strpos($_POST['email'], "\r") !== false || strpos($_POST['betreff'], "\n") !== false || strpos($_POST['betreff'], "\r") !== false) {
    die('Fehlerhafte Eingabe');
}

es funktioniert so weit auch alles wunderbar aber wie bekomme ich es hin
dass in der Mail an mich die Vollständigen Adressdaten mit der Nachricht drinstehen?

Du musst die Eingaben in die Variable einbauen, die als Message versendet wird, z.B.:

$nachricht1 = "Nachricht von " $_POST['name'] . ", " . $_POST["email"] . ", " . $_POST["telefon"] . "\n\n";
$nachricht1 .= "".$_POST["nachricht"]."\n\n";

07.09.2009 14:07 | geändert: 07.09.2009 14:09

7 Moni

das heißt dann müsste das so aussehen:

$header.="From: \"".$_POST["name"]."\" <".$_POST["email"].">\n";
                 
$header.="Organization: ".substr($deinemailadresse,strpos($deinemailadresse,"@"))."\n";
                
$header.="Content-Type: text/plain;\n";

$header.="X-Mailer: PHP/".phpversion();

if (strpos($_POST['name'], "\n") !== false ||  strpos($_POST['name'], "\r") !== false ||  strpos($_POST['email'], "\n") !== false ||  strpos($_POST['email'], "\r") !== false || strpos($_POST['betreff'], "\n") !== false || strpos($_POST['betreff'], "\r") !== false) {
    die('Fehlerhafte Eingabe');
}		      

und hier müsste ich das dann auch noch eintragen:

 mail("\"".$_POST["name"]."\" <".$_POST["email"].">",$betreff_danke,$body_danke,$header_danke);
 
if (strpos($_POST['name'], "\n") !== false ||  strpos($_POST['name'], "\r") !== false ||  strpos($_POST['email'], "\n") !== false ||  strpos($_POST['email'], "\r") !== false || strpos($_POST['betreff'], "\n") !== false || strpos($_POST['betreff'], "\r") !== false) {
    die('Fehlerhafte Eingabe');
} 

Wenn ich das einbaue geht mein Formular nicht mehr - Fehlermeldung:

Du musst die Eingaben in die Variable einbauen, die als Message versendet wird, z.B.:
$nachricht1 = "Nachricht von " $_POST['name'] . ", " . $_POST["email"] . ", " . $_POST["telefon"] . "\n\n";
$nachricht1 .= "".$_POST["nachricht"]."\n\n";

07.09.2009 15:04

8 Jörg Kruse

Die Überprüfung auf Umbrüche solltest du einbauen, bevor du die Mail verschickst. Da das Script in dioesem Fall beim Vorhandensein von Umbrüchen abbricht, reicht es, wenn du die Überprüfung einmal einbaust, möglichst am Anfang:

if(isset($_POST["submit"]))
{

if (strpos($_POST['name'], "\n") !== false ||  strpos($_POST['name'], "\r") !== false ||  strpos($_POST['email'], "\n") !== false ||  strpos($_POST['email'], "\r") !== false || strpos($_POST['betreff'], "\n") !== false || strpos($_POST['betreff'], "\r") !== false) {
    die('Fehlerhafte Eingabe');
}

Wenn ich das einbaue geht mein Formular nicht mehr - Fehlermeldung:

In solchen Fällen bitte immer die vollständige Fehlermeldung wiedergeben.

Der Fehler wird wohl durch den fehlenden Punkt verursacht:

$nachricht1 = "Nachricht von " . $_POST['name'] . ", " . $_POST["email"] . ", " . $_POST["telefon"] . "\n\n";

07.09.2009 15:38

9 Moni

Hallo Jörg,
sorry, werde ich mir bei der nächsten (hoffentlich nicht so bald) Fehlermeldung merken.

Es funktioniert, ich bin begeistert, auch wenn ich noch lange nicht alles verstanden habe ist es sehr interessant und ich sehe schon, dass ich mich damit beschäftigen werde.

Vielen Dank für Deine tolle Hilfe

Hier nun nochmal den gesamten Code, falls Du sonst noch Fehler oder Verbesserungsvorschläge hättest:

<?php
include "config.php";
              
if(isset($_POST["submit"]))
{

if (strpos($_POST['name'], "\n") !== false ||  strpos($_POST['name'], "\r") !== false ||  strpos($_POST['email'], "\n") !== false ||  strpos($_POST['email'], "\r") !== false || strpos($_POST['betreff'], "\n") !== false || strpos($_POST['betreff'], "\r") !== false) {
    die('Fehlerhafte Eingabe');
}
              
if(!$_POST["name"] || empty($_POST["name"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Name.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }
           
elseif(!$_POST["email"] || empty($_POST["email"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: E-Mail.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }

if(!$_POST["telefon"] || empty($_POST["telefon"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Telefon.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }

elseif(!$_POST["betreff"] || empty($_POST["betreff"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Betreff.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }
              
elseif(!$_POST["nachricht"] || empty($_POST["nachricht"])) { ?>
<div align="center"><span class="mail">Sie haben folgende Angabe vergessen einzutragen: Nachricht.</span>&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"]; ?>" title="zurück">zurück</a></div>
<?php }
           
else
{
             
$header.="From: \"".$_POST["name"]."\" <".$_POST["email"].">\n";
$header.="Organization: ".substr($deinemailadresse,strpos($deinemailadresse,"@"))."\n";
$header.="Content-Type: text/plain;\n";
$header.="X-Mailer: PHP/".phpversion();

$nachricht1 =
"" . "Nachricht von " . $_POST['name'] . ",

" . $_POST["firma"] . ",
" . $_POST["strasse"] . ",
" . $_POST["plz"] . ",
" . $_POST["ort"] . ",
" . $_POST["email"] . ",
" . $_POST["telefon"] . ",
" . $_POST["fax"] . ",

" . $_POST["nachricht"] ."\n\n";
                               
mail("\"".$deinname."\" <".$deinemailadresse.">",$betreff,$nachricht1, $header);
              
$betreff_danke = "Vielen Dank";
            
$body_danke = "Hallo, Frau/Herr ".$_POST["name"].",\n\nVielen Dank fuer Ihren Besuch auf unseren Internetseiten!\n\nIhre Anfrage wird schnellstmoeglich bearbeitet .\n\n\nMit freundlichen Gruessen\n\n".$deinname."\n\nDies ist eine vom System automatisch generierte Bestaetigungs-Email.
Ihre Nachricht:\n\n".$nachricht1."";
$header_danke.="\"".$deinname."\" <".$deinemailadresse.">";
$header_danke.="Organization: ".substr($deinemailadresse,strpos($deinemailadresse,"@"))."\n";
$header_danke.="Content-Type: text/plain;\n";
$header_danke.="X-Mailer: PHP/".phpversion();
             
 mail("\"".$_POST["name"]."\" <".$_POST["email"].">",$betreff_danke,$body_danke,$header_danke);
  
?>

<table border="0"><tr><td colspan="2" align="left">
Vielen Dank für Ihre Nachricht</td></tr>
<tr><td colspan="2" align="center">&nbsp;</td></tr>
<tr><td>Name:</td><td><?php echo $_POST["name"]; ?></td></tr>
<tr>
  <td>E-Mail-Adresse:</td>
  <td><a href="mailto:<?php echo $_POST["email"]; ?>"><?php echo $_POST["email"]; ?></a></td></tr>

<?php } ?>
<tr><td valign="top" >Ihre Nachricht:</b></td>
<td><?php echo nl2br($_POST["nachricht"]); ?></td></tr><tr>
<tr><td colspan="2" align="center">&nbsp;</td></tr>
  <td colspan="2" align="center">Eine Best&auml;tigungs- E-Mail von uns ist bereits unterwegs!</td>
</tr></table>
<?php
 }
              
else
{
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
                <table border="0" cellspacing="0" cellpadding="5">
                <tr>
                  <td class="h4">Name*:</td>
                  <td><input name="name" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                    <td class="h4">Firma:</td>
                    <td><input name="firma" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                  <td class="h4">Strasse:</td>
                  <td><input name="strasse" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                  <td class="h4">PLZ:</td>
                  <td><input name="plz" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                  <td class="h4">Ort:</td>
                  <td><input name="ort" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                 <td class="h4">E-Mail*:</td>
                 <td><input name="email" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                  <td class="h4">Telefon*:</td>
                  <td><input name="telefon" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                  <td class="h4">Fax:</td>
                  <td><input name="fax" type="text" class="formular" size="46"></td>
                </tr>
                <tr>
                 <td class="h4">Betreff*:</td>
                 <td><input name="betreff" type="text" class="formular" size="46"></td>
                </tr>
               
                <tr>
                 <td valign="top" class="h4">Nachricht*:</td>
                 <td><textarea name="nachricht" cols="36" rows="5" class="feld"></textarea></td>
                </tr>
                <tr>
                 <td>&nbsp;</td>
   <td align="left"><input type="reset" value="zurücksetzen" class="formular">&nbsp;<input type="submit" value="abschicken" name="submit" class="formular"></td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td align="left" class="h4">Für eine korrekte Abwicklung geben Sie bitte Ihre vollständigen Daten an.</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td align="left" class="h4">*-Felder sind Pflichtfelder.</td>
                </tr>
                </table>
  </form>
                <?php } ?>                 

Schönen Abend
Moni

07.09.2009 17:22

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]