E-Mail mit UTF-8 Codierung

max

Erfahrenes Mitglied
So hab schon wieder ein Problemchen.

Ich versende meine Mails UTF-8 Codiert (da die Seite von der sie gesendet werden für mehrere Sprachen geeignet sein soll) nur leider werden mir Umlaute nicht Angezeigt.

Und noch eine kleinigkeit habe ich, wenn ich die E-Mail als Plain Text versende gehen die Zeilenumbrüche auch nicht.

Ich Codiere die Nachricht mit utf8_encode().

PHP:
 mail($empfaenger,$betreff,$text,"From:".$absender."\nContent-Type:text/html;\n\tcharset=\"utf-8\"");
 
Headerfelder werden allgemein durch die Zeichenfolge „CR LF“ (U+000D, U+000A) von einander getrennt.
 
Gumbo hat gesagt.:
Headerfelder werden allgemein durch die Zeichenfolge „CR LF“ (U+000D, U+000A) von einander getrennt.
Aus Erfahrung kann ich sagen, dass in der Regel der LineFeed (\n) ausreicht. \r\n entspricht aber dem Standard und es koennte theoretisch auch Mailserver geben die mit \n ohne \r nichts anfangen koennen.
 
Dennis hat Recht: obwohl die Zeichenfolge „CR LF“ im HTTP-Protokoll als Zeilenumbruch definiert ist, müssen auch einzelnstehende CR- und LF-Zeichen – solange sie konsistent als Zeilenumbruchzeichen verwendet werden – als Zeilenumbruchzeichen interpretiert werden. (S. Canonicalization and Text Defaults)
Mit der Zeichenfolge „CR LF“ ist man jedoch immer auf der sicheren Seite.

Falls es dir Probleme macht oder es dir zu umständlich ist, jedes mal darauf zu achten, kannst du das Ganze auch etwas automatisieren:
PHP:
<?php

	function canonicalizeMessage($string)
	{
		return preg_replace('/(?:\x0A|\x0D\x0A|\x0D)/s', chr(0x0D).chr(0x0A), $string);
	}

	$headerFields = array(
		'From'         => $absender,
		'Content-Type' => 'text/html; charset="utf-8"'
	);

	$additionalHeader = '';
	foreach( $headerFields as $key => $value ) {
		$additionalHeader .= $key.': '.$value . chr(0x0D).chr(0x0A);
	}
	mail($empfaenger, $betreff, canonicalizeMessage($text), $additionalHeader);

?>
 
So jetzt habe ich es so gemacht wie Gumbo vorgeschlagen hat und es funktioniert einwandfrei.

Danke!
 
Zurück