Hallo,
OK, dann habe ich durch das Forum gelernt, ich soll, wenn ich eine Mail mit PHP versenden will, dies _so_ tun:
<?php
$empfaenger="musterfrau@example.net";
$betreff="Bitte bestätigen Sie Ihren Gästebucheintrag";
mail($empfaenger,utf8_decode($betreff),$text,$header, "-fmustermann@example.com");
Das Ganze speichere ich ab als mailtest.php, utf-8 codiert, ohne BOM. Nun meine Fragen:
1.) Zunächst mal: _Ist_ das jetzt richtig so oder nicht?
Nein.
4.) Wenn ich das alles so mache, wie oben beschrieben, dann ist doch der Betreff durch das
utf8_decode($betreff)
_nicht_ utf-8 codiert - zumindest hatte ich das angenommen. Ich nehme an, das ist mal falsch, oder?
Ja. Was macht utf8_decode(), wenn es so aufgerufen wird, wie Du es hier machst: Es wandelt den Inhalt von $betreff von UTF-8 in ISO-8859-1 um. Damit hast Du *nichts* gewonnen. Ob UTF-8 oder ISO-8859-1 ist hier wurscht, wenn es um Sonderzeichen geht. Also bleib' zuerst mal bei UTF-8.
Sind Sonderzeichen wie das "ä" in Deinem Beispiel im Mailbetreff zulässig?
Nein.
Wie können sie korrekt codiert werden?
a) Quoted Printable
b) base64
Welche Funktion kann dies für uns erledigen?
Die von mir verlinkte mb_encode_mimeheader.
Was bewirkt bei Deinem Beispiel:
mb_encode_mimeheader($betreff, "UTF-8", "Q")
Schau's Dir an.
7.) Wenn ich also eine Text-Mail mit dem Betreff "Bitte bestätigen Sie Ihren Gästebucheintrag" und dem Inhalt "Hänsel und Gretel wünschen sich Hörnchen über alles." versenden möchte und will, daß die Umlaute sowohl im Header als auch im Inhalt richtig dargestellt werden, dann soll ich _doch nicht_ mit utf-8 arbeiten? Was ist denn nun die Standardlösung?
Doch natürlich. Bleib' bei UTF-8. Nur denke daran, dass Du in den Mail-Headern kein UTF-8 verwenden darfst, sondern nur 7-Bit-ASCII. Das ist ein Protokollproblem, kein UTF-8-Problem und soll kein Widerspruch sein.
Netterweise gibt es eine Encodiervorschrift, mit der man UTF-8 in Mailheadern verwenden kann. Der Zwischenschritt mit utf8_decode ist nicht nur überflüssig, sondern sogar kontraproduktiv, wenn Zeichen enthalten sind, die in ISO-8859-1 nicht enthalten sind. Beispiel gefällig: ISO-8859-1 enthält *kein* Eurozeichen.
Übrigens ist der Betreff-Header-Body nicht der einzige, der so behandelt werden muss. Es gilt für jeden Header-Body, zum Beispiel auch für die Empfänger-Adresse:
"Jürgen Mustermann-Weiß" j.mustermann-weiss@example.org
Freundliche Grüße
Vinzenz