Xen: Kontaktformular in HTML als Mail versenden

Guten Morgen Leute,

hab ein kleines Problem wahrscheinlich ist es nur eine Kleinigkeit. Ich will mein Kontaktformular als HTML Mail versenden, jedoch bekomme ich den HTML Code geschickt. Kann mir jmd sagen was ich daran ändern muss um die Mail richtig angezeigt zu bekommen.

Hier der Code zum versenden:

<?php  
  
/*Variablen werden umgewandelt*/  
/*weitere Felder nach &auml;hnlichem Muster verwenden*/  
	$company = $_POST['company'];  
	$name = $_POST['name'];  
	$adress = $_POST['adress'];  
	$zip_code = $_POST['zip_code'];  
	$city = $_POST['city'];  
	$county = $_POST['county'];  
	$country = $_POST['country'];  
	$phone = $_POST['phone'];  
	$fax = $_POST['fax'];  
	$email = $_POST['email'];  
	$message = $_POST['message'];  
   	  
  
/*Hier werden alle Daten eingegeben*/  
/*An wen soll die Anfrage gerichtet sein?*/  
 $webmaster = "nico.felix@web.de";  
/* $webmaster = "info@schriftdruck.de";*/  
/*Welche E-Mail-Adresse soll als Absender eingegeben werden?*/  
 $absender = "info@schriftdruck.de";  
	  
/*Wie soll die Mail aussehen, die an den webmaster gerichtet ist? Formularfelder werden wie folgt eingef&uuml;gt "$NameDesFeldes"*/  
/*Betreff*/		$betreffwebmaster = "Message to Xpose Print Ireland";  
/*Textk&ouml;rper*/  	$koerperwebmaster = "  
<html>  
<head>  
<title>Xpose Print ::</title>  
  
<style type=\"text/css\">  
<!--  
body {  
	font-family:\"Verdana\", Arial, Helvetica, sans-serif;  
	color:#000000;  
	font-size:8pt;  
	background-image:url(../bilder/bg.gif);  
	background-repeat:repeat-x;  
	background-position:top;  
	background-color:#FFFFFF;  
}  
  
.titles { font-size: 12pt; color: #01827d; font-weight: bold;}  
  
.bold {color: #01827d; font-weight: bold;}  
  
.price {color: #e15914; font-weight: bold;}  
  
.next {font-size: 8pt; color: #e15914; font-weight: bold; letter-spacing:-1px;}  
a.next:link { color: #e15914; text-decoration: none; }  
a.next:visited { text-decoration:none; color:#e15914; }  
a.next:hover { color:#01827d; text-decoration:none; }  
a.next:active { color:#01827d; text-decoration:none;}  
  
  
a:link { color: #01827d; text-decoration: underline; font-weight: bold; letter-spacing:-1px;}  
a:visited { text-decoration:none; color:#01827d; }  
a:hover { color:#e15914; text-decoration:none; }  
a:active { color:#e15914; text-decoration:none;}  
  
-->  
</style>  
  
</head>  
<body>  
<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">Company</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">$company</td>  
              </tr>  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">Name</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">$name</td>  
              </tr>  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">Address</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">$adress</td>  
              </tr>  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">ZIP Code</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">  
                  <table width=\"500\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">  
                    <tr>  
                      <td width=\"200\">$zip_code</td>  
                      <td width=\"100\" style=\"padding-left:15px\"><span class=\"bold\">City</span></td>  
                      <td width=\"200\">$city</td>  
                    </tr>  
                  </table></td>  
			  </tr>  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">County</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">  
                  <table width=\"500\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">  
                    <tr>  
                      <td width=\"200\">$county</td>  
                      <td width=\"100\" style=\"padding-left:15px\"><span class=\"bold\">Country</span></td>  
                      <td width=\"200\">$country</td>  
                    </tr>  
                  </table></td>  
			  </tr>  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">Phone</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">  
                  <table width=\"500\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">  
                  <tr>  
                    <td width=\"200\">$phone</td>  
                    <td width=\"100\" style=\"padding-left:15px\" ><span class=\"bold\">Fax</span></td>  
                    <td width=\"200\">$fax</td>  
                  </tr>  
                </table></td>  
              </tr>  
              <tr>  
                <td width=\"100\" height=\"27\" valign=\"top\"><span class=\"bold\">eMail</span></td>  
                <td width=\"500\" height=\"27\" valign=\"top\">$email</td>  
              </tr>  
              <tr>  
                <td width=\"100\" valign=\"top\"><span class=\"bold\">Message</span></td>  
                <td width=\"500\" valign=\"top\">$message</td>  
              </tr>  
        </table>  
</body>  
</html>  
";  
  
/*Was soll nach dem Absenden des Formulares geschehen.  
1\. Verweis auf andere HTML- bzw. PHP-Seiten (bei $action eine 1 eintragen)  
2\. Anzeige direkt in der danke.php (bei $action eine 2 eintragen)*/  
$action = 2;  
  
/*Direkte Anzeige der Fehler in der danke.php  
Welche Fehlermeldung soll ausgegeben werden, wenn die E-Mail-Adresse falsch eingegeben wurde? Bitte mit HTML-Tags arbeiten,  
es k&ouml;nnen auch Klassen f&uuml;r CSS zugewiesen werden*/  
$mailfalsch = "<p class=titles>Fehler</p><p>Leider ist die E-Mail-Adresse falsch</p><p>Bitte kontrollieren Sie noch einmal die Eingabe und senden Sie das Formular erneut ab.";  
  
/*Welche Fehlermeldung soll ausgegeben werden, wenn nicht alle Pflicht-Felder ausgef&uuml;llt sind?*/  
$felderleer = "<p class=titles>Fehler</p><p>Die Nachricht konnte nicht versandt werden, da nicht alle Felder ausgefüllt wurden.</p>";  
  
/*Wie soll der Text aussehen, wenn die E-Mail versendet wurde?*/  
$abgesandt = "<p class=titles>Danke!</p><p>Die Nachricht wurde erfolgreich versand.";  
  
/*Sind alle Felder ausgef&uuml;llt? f&uuml;r jedes Feld das ausgef&uuml;llt sein mu&szlig;, mu&szlig; hier ein entsprechender Eintrag gemacht werden*/  
if ($name == "" || $email =="" || $message =="")  
/*###??<&ucirc;???&rsaquo;?????????&rsaquo;###########################################################################  
  #Bitte ab hier nichts mehr &auml;ndern. Alle Angaben sind im oberen Teil zu machen#  
  ##############################################################################*/  
	{  
	/*nein*/  
	if ($action == 1)  
		header("location:");  
	else echo "$felderleer";  
	}  
		else  
			{  
			/*ja*/  
			/*Ist die E-Mail-Adresse richtig eingegeben?*/  
			if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $email))  
				{  
				/*E-Mail-Adresse ist richtig*/  
				mail("$webmaster","$betreffwebmaster","$koerperwebmaster\n","FROM: $email\n");  
  
				/*Soll der Absender eine Kopie erhalten?*/  
				if ($kopie == "ja")  
					{  
					mail("$email","$betreffabsender","$koerperabsender\n");  
					if ($action == 1) header("location:".$sUrlMailVersendet);  
					else echo "$abgesandt";  
					}  
				else  
					{  
					if ($action == 1) header("location:".$sUrlMailVersendet);  
					else echo "$abgesandt";  
					}  
				}  
				else  
				{  
					/*nein*/  
					if ($action == 1) header("location:".$sUrlMailFalsch);  
					else echo "$mailfalsch";  
				}  
		}  
		  
$Header = "MIME-Version: 1.0\n";  
$Header .= "Content-type: text/html; charset=iso-8859-1\n";  
$Header .= "From: $name <$email>\n";  
?>  

  1. <?php

    $Header = "MIME-Version: 1.0\n";
    $Header .= "Content-type: text/html; charset=iso-8859-1\n";
    $Header .= "From: $name <$email>\n";
    ?>

      
    Der Versand findet doch vorher statt, oder?  
    Wenn Du die Variable erst danach setzt, wie soll er sie dann in der mail-function benutzen?  
      
    Gruß  
    Dynamite
    
  2. echo $begrüßung;

    hab ein kleines Problem wahrscheinlich ist es nur eine Kleinigkeit.

    Ich denke eher, du hast dir ein hornaltes Script an Land gezogen, das jede Menge Unsinn und grobe Fehler enthält und das du nun ohne grundlegende Kenntnisse zu ändern versuchst.

    /*Variablen werden umgewandelt*/
    $company = $_POST['company'];

    Wozu? Die meisten dieser POST-Array-Einträge werden nicht mehr als einmal verwendet. Du betreibst hier einen unnötigen Mehraufwand, indem du sie umkopierst.

    /*weitere Felder nach &auml;hnlichem Muster verwenden*/

    In einem PHP-Script befindet man sich nicht im Kontext HTML. Umlaute in Kommentaren in HTML-Form zu notieren ist unsinnig.

    /*Wie soll die Mail aussehen, die an den webmaster gerichtet ist? Formularfelder werden wie folgt eingef&uuml;gt "$NameDesFeldes"*/

    Inhalte von Formularfeldern müssen kontextgerecht behandelt werden, wenn sie in einen anderen Kontext eingefügt werden.

    Zudem sind mitunter Inhaltsprüfungen angebracht. Zeilenumbrüche in Werten, die in Header-Zeilen eingefügt werden sollen, sind meist ein Zeichen für Missbrauch. Das gilt es abzufangen, wenn man keine Spamschleuder aufsetzen will. (Ich erwähne das nur der Vollständigkeit halber, in deinem Beispiel kommt dieser Aspekt nicht vor.)

    /*Textk&ouml;rper*/   $koerperwebmaster = "
    <style type="text/css">

    Es gibt die Heredoc-Syntax. Die ist für größere Textbrocken besser geeignet. Außerdem kann man sich mit der das Maskieren der Anführungszeichen sparen.

    <td width="500" height="27" valign="top">$company</td>

    Statt der reinen Umkopiererei wäre es sinnvoller gewesen, die Werte für den HTML-Kontext zu behandeln, sonst kann dir jeder HTML-Code unterjubeln oder du bekommst zumindest Probleme, wenn jemand <http://de.selfhtml.org/html/allgemein/zeichen.htm#html_eigene@title=HTML-eigene Zeichen> in den Werten verwendet.

    Es ist zudem nicht nötig, hier jede Menge HTML-Code abzukippen, der mit dem Problem nichts weiter zu tun hat.

    #Bitte ab hier nichts mehr &auml;ndern. Alle Angaben sind im oberen Teil zu machen#

    Der Autor hat das ja nicht umsonst da hin geschrieben. Zumindest wissen sollte man, was man da tut, wenn man sich nicht daran hält.

      header("location:");  
    

    Was soll das denn werden? Hier fehlt eine URL.

      	/\*Ist die E-Mail-Adresse richtig eingegeben?\*/  
      	if (ereg("^[\_a-zA-Z0-9-]+(\.[\_a-zA-Z0-9-]+)\*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $email))  
    

    Dieser RegExp verwendet zum einen die alten Posix-RegExp-Funktionen, die zugunsten der Perl-RegExp-Funktionen nicht mehr verwendet werden sollen, weil sie nicht nur oftmals langsamer sind sondern auch in zukünftigen PHP-Versionen nicht mehr (standardmäßig) enthalten sein werden. Zudem gibt es inzwischen gültige Domains, die mehr als 4 Zeichen im Top-Level haben (.museum beispiesweise). Diskussionen zu Email-Prüfungen gibt es übrigens genügend im hiesigen Archiv.

      		mail("$webmaster","$betreffwebmaster","$koerperwebmaster\n","FROM: $email\n");  
    

    Variablen in "" einzurahmen ist eine Sünde, die eigentlich schon seit Jahren ausgestorben sein sollte.

    Und hier hast du deine Spamschleuder. Der Wert in $_POST['email'] beziehungsweise $email wird ohne weitere Kontrolle in eine Headerzeile eingefügt. Hier lassen sich beliebige weitere Headerzeilen in die Mail bringen und somit beispielsweise weitere Empfänger hinzufügen. Werte, die in Headerzeilen gelangen sollen, sind mindestens auf enthaltene Zeilenumbrüche zu testen. Ist ein solcher drin, handelt mit Sicherheit um einen Missbrauchsversuch, den es zu unterbinden gilt. (Grußloses Abbrechen wäre angebracht. Spambots würden eine Fehlermeldungen sowieso nicht verstehen.)

    Für Texte in Subjekten gelten besondere Kodierungsvorschriften. Siehe unter anderem jenen Thread ungefähr ab Posting vom 26. 01. 2009, 10:20 und die folgenden. Beachte, dass dort UTF-8 als Kodierung verwendet wird und du, wenn du ISO-8859-1 verwenden willst, das entsprechend anpassen musst.

    $Header = "MIME-Version: 1.0\n";
    $Header .= "Content-type: text/html; charset=iso-8859-1\n";
    $Header .= "From: $name <$email>\n";
    ?>

    Nachdem alle Messen gelesen sind, setzt du hier einige Variablen, die du nicht weiter verwendest, weil das Script danach endet.

    echo "$verabschiedung $name";