mail () in PHP met UTF-8 en umlauts

E-mailen met PHP kan het beste worden gedaan met krachtige klassen zoals PHPMailer . Handige wrapper-functies maken het mogelijk om inhoud in UTF-8 met een paar regels code te gebruiken, afbeeldingen in te sluiten en bijlagen versleuteld te verzenden. Als u de overhead wilt besparen en, in tegenstelling tot de aanbeveling, de PHP-functie mail () wilt gebruiken , zult u uiterlijk problemen ondervinden bij het gebruik van umlauts en UTF-8.


Na het aanroepen van de functie met

mail(
   "vieldav@gmx.de",                          // Empfänger
   "ä ö ü ß",                                 // Betreff
   "ä ö ü ß",                                 // Inhalt
   "From: ä ö ü ß <david@vielhuber.de>"       // Header (Absender)
);

in een UTF-8-gecodeerd bestand leidt al tot problemen in de inbox: Outlook 2013 is nog steeds genadig en geeft alles correct weer:

mail1

Maar GMX vergeeft de ontbrekende headers al niet en toont een onsuccesvol onderwerp, afzender en inhoud:

mail2

Als je de juiste headers verstuurt (bijvoorbeeld met base64_encode) krijg je

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)
);

en tot slot toont GMX ook een correcte weergave:

mail3

Terug