Einen E-Mail-Versand mit PHP realisiert man am besten mit mächtigen Klassen wie PHPMailer. Komfortable Wrapper-Funktionen ermöglichen es, mit wenigen Zeilen Code Inhalte in UTF-8 zu verwenden, Bilder einzubetten und Anhänge verschlüsselt zu versenden. Will man sich den Overhead sparen und entgegen der Empfehlung die PHP-Funktion mail() verwenden, stößt man spätestens bei der Verwendung von Umlauten und UTF-8 auf Probleme.
Nach Aufruf der Funktion mit
mail(
"vieldav@gmx.de", // Empfänger
"ä ö ü ß", // Betreff
"ä ö ü ß", // Inhalt
"From: ä ö ü ß <david@vielhuber.de>" // Header (Absender)
);
in einer UTF-8 kodierten Datei führt im Posteingang bereits zu Problemen: Outlook 2013 ist noch gnädig und stellt alles korrekt dar:
Aber schon GMX verzeiht die fehlenden Header nicht und zeigt einen missratenen Betreff, Absender und Inhalt:
Sendet man die korrekten Header (beispielsweise mit base64_encode) mit, erhält man
mail(
"vieldav@gmx.de", // Empfänger
"=?UTF-8?B?".base64_encode("ä ö ü ß")."?=", // Betreff
"ä ö ü ß", // Inhalt
"Content-type: text/plain; charset=utf-8\r\n"
."From: =?UTF-8?B?".base64_encode("ä ö ü ß")."?=<david@vielhuber.de>" // Header (Absender)
);
und schließlich zeigt auch GMX eine korrekte Darstellung: