Also
mb_send_mail()
produziert, da es ja UTF-8 verschickt, ein Mail, dessen Body wie folgt transportiert wird:Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: BASE64
Für base64-codierten Content noch UTF-8 zu deklarieren, ist eigentlich Unfug. Da kommen sowieso nur ASCII-Zeichen vor; charset=ASCII würde also genügen.
Äh: Kein Unfug. In den Mails hat jeder Block/Part (Body, Alternativer HTML-Text, Anhänge) einen eigenen Header).
Der wieder führt auf, was nach dem Dekodieren drin stehen soll:
Content-Type: text/plain; charset=UTF-8
und, damit auch bekannt wird, wie der Inhalt dekodiert werden soll, wie dieser für den Transport kodiert wurde:
Content-Transfer-Encoding: BASE64
Das ist alles. Eigentlich ist das „so richtig schön einfach“. Im ersten Header steht noch das „Boundary“ (Eine Zeile mit Text, der im Inhalt nicht vorkommen soll), welches die Blöcke trennt).