• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Mail formatieren

RuthG

New member
Hallo,

habe gerade ein Bestellformular erstellt mit php. Da dieses viele verschiedene Details enthält möchte ich das Mail das versendet wird formatieren.

Wie mache ich das richtige? Wo setze ich das css ein, damit es auch interpretiert wird? Wo "darf" ich die classen und ids eintragen?

Ich habe noch nicht viel in php gemacht und immer nur mit logischen Denken und probieren fertige Scripts angepasst.

PHP:
<?
$fehler ="";
$nz = chr(13);
$who = $_POST['who'];
$customer= $_POST['customer'];
$company = $_POST['company'];
$name= $_POST['name'];
$number= $_POST['number'];
$phone= $_POST['phone'];
$fax= $_POST['fax'];
$mail= $_POST['mail'];
$bill_street= $_POST['bill_street'];
$bill_city= $_POST['bill_city'];
$bill_country= $_POST['bill_country'];
$bill_zip= $_POST['bill_zip'];
$ship_street= $_POST['ship_street'];
$ship_city= $_POST['ship_city'];
$ship_country= $_POST['ship_country'];
$ship_zip= $_POST['ship_zip'];
$units= $_POST['units'];
$article= $_POST['article'];
$note= $_POST['note'];
$message= $_POST['message'];
$pay= $_POST['pay'];
$shipping= $_POST['shipping'];
$what= $_POST['what'];
$condition= $_POST['condition'];

if (empty($who)) $fehler .= "<li>Please, fill if you are a private person or a company. </li>";
if (empty($customer)) $fehler .= "<li>Please, check if you have already ordered from us.</li>";
if (empty($name)) $fehler .= "<li>Please, fill in your name. </li>";
if (empty($phone)) $fehler .= "<li>Please, fill in your phone number. </li>";

if (empty($message)) $fehler .= "<li>Please, tell us how we can help you. The Messagebox is empty. </li>";

if (empty($condition)) $fehler .= "<li>Please, read your conditions and click the box. </li>";
if (empty($fehler)) {

	$an = "r.giefing@roithner-laser.com";
	$betreff = "Subject: " .$what .", ".$company;
	$from = "from Website: " .$what;
	$datum = "Datum: ".date("j.n.Y").$nz;
	$zeit = "Zeit: ".date("H:i").$nz;
	$von = "Von: ".$name."<".$mail.">".$nz;
	$bill_adress = "Billing Adress: ".$bill_street .", " .$bill_city .", " .$bill_country .", " .$bill_zip;
	$ship_adress = "Shipping Adress: ".$ship_street .", " .$ship_city .", " .$ship_country .", " .$ship_zip;
	$personal = "Personal details:" .$nz .$who .", Already customer? ".$customer .", Customer Number: " .$number .$nz ."Company: " .$company .$nz ."Name: " .$name .$nz ."Mail: " .$mail .", Phone: " .$phone .", Fax: " .$fax .$nz .$bill_adress .$nz .$ship_adress;
	$order = "Order:" .$units .$article .$note .$nz;
	$text = "$datum $zeit $personal $nz Payment: $pay $nz Shipping: $shipping $nz $order Message: $message $nz Order or Request: $what, Condition: $condition";
	$titel = "Thank you for your $what. You will get a confirmation within the next days.";
	
	mail($an,$betreff,$text,$from);
	} else $titel = "Sorry, but there is a mistake.";
	?>



<html>
	
	<style type="text/css">
	body {
	font-family: Verdana, Georgia, Arial, Helvetica, sans-serif;
	font-size: 1em;
	text-align:left;
	margin-top:50px;}
	
	p { margin-bottom:5px;}
	
	</style>
    
	<head>
	<title><?=$titel?></title>
	</head>
    
	<body>
	<?
	if (empty($fehler)) {
		$text = strip_tags($text);
		$text = htmlentities($text);
		$text = str_replace($nz,"<br>",$text);
		echo "<p>Thank you for your request/order! You will get a confirmation within the next days.</p>";
		echo "<p>$text</p>";
	}	else {
		echo "<p>Sorry, your message could not be send:";
		echo "<ul>$fehler</ul>";
		echo "</p>";
		
	}
	?>
	
	</body>
	</html>

Danke, LG
Ruth
 
Für HTML Mails solltest du am besten Inline-Styles verwenden. Dann bist du auf bei den meisten E-Mail Programmen auf der sicheren Seite.
 
In deinen Mailtext.
Ich weiß halt nur nicht welche Variablen bei dir den Mailtext wiederspiegeln.
Hier etwas Theorie:
PHP:
$betreff='Test';
$mailBody='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
$mailBody.='<html>';
$mailBody.='<head>';
$mailBody.='</head>';
$mailBody.='<body>';
$mailBody.=$anrede.' '.$name.'<br>';
$mailBody.='...';
$mailBody.='</body>';
$mailBody.='</html>';
 
HTML Mails sollten immer einen alternativen Plain/Text Inhalt haben, ansonsten ist die Mail für viele Leser leer. Ausserdem werden reine HTML Mails von Spamsoftware negativ bewertet.
 
Mein Mailtext ist das hier:

PHP:
$text = "$datum $zeit $personal $nz Payment: $pay $nz Shipping: $shipping $nz $order Message: $message $nz Order or Request: $what, Condition: $condition";

Das $nz zb ist ein Zeilenumbruch. Muss ich andere Elemente auch vorher definieren? Wenn ich in den obigen String einfach <b></b> reinschreibe wird das als Text im Mail ausgegeben.
 
Zuletzt bearbeitet:
Du musst dann Text um die HTML-Tags wie im Beispiel gezeigt erweitern.
Hierfür verkettest du die Variable $text mittels ".="
PHP:
$text='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
$text.='<html>';
...
Wie du den Text dann genau formatieren willst, weißt du ja selber. Hier schreibst du einfach die HTML-Tags in deinen Text mit rein.
 
hab das jetzt mal probiert. Leider bekomme ich jetzt die Mails nicht mehr :(

PHP:
$text.='<html>';
$text.='<head>';
$text.='</head>';
$text.='<body>';
$text.='$datum $zeit $personal $nz $pay $nz  $shipping $nz $order $message $nz $what $condition';
$text.='</body>';
$text.='</html>';
 
Diese Zeile:
PHP:
$text.='$datum $zeit $personal $nz $pay $nz  $shipping $nz $order $message $nz $what $condition';
Musst du in doppelte Anführungszeichensetzen:
PHP:
$text.="$datum $zeit $personal $nz $pay $nz  $shipping $nz $order $message $nz $what $condition";
Sonst enthält sie keine Werte.
Dazu musst du den ersten Aufruf der Variablen $text ohne . schreiben. Das .= ist nur zur Verkettung existierender Variablen.
 
wahrscheinlich im Spamfilter gelandet

Soweit ich weiß, kann man den Rückgabewert der mail Funktion überprüfen, um zu sehen ob die Mail abgeschickt wurde.
 
Ist das jetzt so richtig?

PHP:
$text='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
	$text.='<html>';
	$text.='<head>';
	$text.='</head>';
	$text.='<body>';
	$text.="$datum $zeit $personal $nz $pay $nz $shipping $nz $order$message $nz $what $condition";
	$text.='</body>';
	$text.='</html>';

seltsamerweise hab ich dann auf einen schwung alle mails bekommen und jetzt kommt schon wieder nix mehr ...
 
Wieviel versendest du denn? Vllt. hakt der Server oder Mailserver.
Im Prinzip ist das jetzt so richtig. Allerdings muss dir klar sein, dass du in der Zeile mit den Daten alle einfach nur unformartiert hintereinander wegschreibst.
 
Ich wollte einfach nur mal wissen ob es funktioniert, bevor ich mir die Mühe mache und es formatiere.

Na mal abwarten :) vielleicht kommt ja bald wieder ein Schwung Mails ...
 
Mail ist endlich angekommen. Leider sieht das Mail nun so aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head></head><body>Datum: 20.5.2010
Zeit: 11:33
Personal details:
privat, Already customer? no, Customer Number:
Company:
Name: Versuch 1
Mail: sdfasdf, Phone: asdfasdf, Fax:
Billing Adress: street name & number, city, country, zip
Shipping Adress: street name & number, city, country, zip
delivery
asdf
Order:2 / rlt1234 / irgendwas
Message Versuch
request accept</body></html>


Der Code wird auch angezeigt als Text ...
 
Du hast bisher auch noch nicht gezeigt, wie Du den Mime-Header der Mail baust oder ich habe es zumindest nicht gesehen.
Die dort verwendete Codierung und ein paar andere Details sind ausschlaggebend, wie ein Mailclient die Mail anzeigt.
 
Mail ist endlich angekommen. Leider sieht das Mail nun so aus:
Wer häßliche HTML-Mails verschicken will, der muss schon ein bißchen mehr tun, als nur einfach HTML-Tags in den Mailtext stopfen. Es mag Mailclients geben, die das abkönnen, aber die meisten zeigen den Text mit sichtbaren Tags an (so wie bei Dir geschehen).

Die einfachste Lösung wäre auf den HTML-Schmutz in der Mail zu verzichten, weiters wäre der Einsatz einer entsprechenden Mail-Klasse ratsam, die kann man den Kodierungen und i.d.R. auch mit Anhängen umgehen. Dann sollte aber trotzdem, wie bereits erwähnt, ein reiner Textteil neben dem HTML-Teil in die Mail gepackt werden, um User, die die Schnörkeleien nicht sehen wollen, zu bedienen.
 
Es handelt sich hierbei NICHT um einen Newsletter. (Mit dem "Problem" darf ich mich dann später noch beschäftigten)
Ich möchte nur das Mail formatieren welches per Formular verschickt wird. Damit meine Kollegin sich leichter tut beim auslesen der Daten.
 
Zurück
Oben