mail () в PHP с UTF-8 и умляутами

Отправлять электронную почту с помощью PHP лучше всего с помощью мощных классов, таких как PHPMailer . Удобные функции-оболочки позволяют использовать контент в UTF-8 с несколькими строками кода, для встраивания изображений и отправки зашифрованных вложений. Если вы хотите сэкономить на накладных расходах и, вопреки рекомендации, использовать функцию PHP mail () , вы столкнетесь с проблемами не позднее, чем при использовании umlauts и UTF-8.


После вызова функции с

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

в кодированном файле UTF-8 уже приводит к проблемам во входящей почте: Outlook 2013 по-прежнему добрый и отображает все правильно:

mail1

Но уже GMX не прощает пропущенные заголовки и показывает неудачные тему, отправителя и контент:

mail2

Если вы отправите правильные заголовки (например, с base64_encode), вы получите

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

и наконец GMX также показывает правильное представление:

mail3

Назад