HTML E-Mail mit Formatierung

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

ich bin am arbeiten einer Mailfunktion mit Anhang.

Leider funktioniert das mit der HTML Mail nicht so, wie gedacht.

Jegliche Formatierung wird ignoriert.

PHP:
$text = "<html>";
	$text .= "<head></head>";
	$text .= "<body>";
	$text .= '<span style="font-family: Arial, Helvetica, sans-serif; 	font-size: 12px;">';
	$text .= nl2br($_POST['text']);
	$text .= "<br />Mit freundlichen Grüßen<br />";
	$text .= "<br />";
	$text .= $name."<br />";
	$text .= $verkauf."<br /><br />";
 	$text .= "Keplinger  GmbH<br />";
	$text .= "A-4050 Traun, Rubensstrasse 36<br/>";
	$text .= "[t]        +43 7229  736 31 ".$dw."<br />";
	$text .= "[f]        +43 7229 / 712 20<br />";
	$text .= "[e]        ".$from."<br />";
	$text .= "[w]        www.keplinger.at</span><br /><br />";
	$text .= 'Firmenbuch-Nr.: 149122 y, Landesgericht Linz, ATU60522429\n';
	$text .= '</body><br />';
	$text .= '</html><br />';

Muss ich da etwas spezielles beachten?

Der Header wird so zusammengesetzt:

PHP:
function mail_attachment( $path, $mailto, $from_mail, $replyto, $subject, $message, $fromname) {
    $file = $path;
    $file_size = filesize($file);
    $handle = fopen($file, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
	
	$suchmuster = "&./Masslisten/&";
	$ersetzung = '';
	$datei = preg_replace($suchmuster, $ersetzung, $file);
	
	$pattern = "&/&";
	$replace = " ";
	$datei_2 = preg_replace($pattern, $replace, $datei);
	
	$pattern_2 = "& &";
	$replace_2 = "_";
	$datei_3 = preg_replace($pattern_2, $replace_2, $datei_2);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: ".$fromname." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/html; charset=utf-8\r\n";
    $header .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$datei_3."\"\r\n"; 
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$datei_3."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
	if($mailto != ""){
		if (mail($mailto, $subject, "", $header)) {
			echo "Mail wurde an ".$mailto." versendet"; 
		} else {
			echo "Mail Versand Fehlgeschlagen!";
		}
	}
	else{
		echo"Kein Absender vorhanden<br />";
		echo"Mail Versand fehlgeschlagen";
	}
}

Die Mail wird versendet, der Typ ist auf HTML, jegliche Formatierung mittels CSS wird aber ignoriert.

Gibt es da einen einfachen Weg?

Grüsse

//edit:

Ich hab den Fehler eingrenzen können. Outlook schneidet beim Style das weg: "f

Muss ich da was escapen?
 
Zuletzt bearbeitet:
Guten Abend,
das erste was mir aufgefallen ist das du Content-type: und Content-Type verndest;
Vielleicht probierst du es mal mit folgendem Content-type den verwende ich immer wenn ich HTML-Mails versenden möchte:

PHP:
$header .=  "Content-type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable\r\n";

Mit freundlichen Grüßen
Leon Bergmann
 
Das Rad erfinde ich deswegen neu, weil ichs auch mal gemacht haben will OHNE zusätzliche Libs.

Ich habe den Teil mit dem Font jetzt ein paar mal escaped und es funktioniert.

Danke auch für den Link, den werd ich mir für Multiattachment mal anschauen.
 
Also produktiv würde ich das allerdings nicht einsetzen, eine header-Injection ist bei einem unescapeten $fromname mehr als einfach ;)
 

Neue Beiträge

Zurück