mail () w PHP z UTF-8 i umlautami

Wysyłanie e-maili za pomocą PHP najlepiej jest zaimplementować za pomocą zaawansowanych klas, takich jak PHPMailer . Wygodne funkcje opakowujące umożliwiają korzystanie z treści UTF-8, osadzanie obrazów i wysyłanie zaszyfrowanych załączników za pomocą zaledwie kilku wierszy kodu. Jeśli chcesz oszczędzić narzut i używać funkcji mail () w PHP wbrew zaleceniom, najpóźniej przy używaniu umlautów i UTF-8 napotkasz problemy.


Wywołanie funkcji za pomocą

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

Korzystanie z plików kodowanych w formacie UTF-8 już powoduje problemy w skrzynce odbiorczej: Outlook 2013 nadal jest łaskawy i wyświetla wszystko poprawnie.:

mail1

Ale GMX nie wybacza brakujących nagłówków i pokazuje zły temat, nadawcę i treść:

mail2

Jeśli wyślesz poprawne nagłówki (na przykład z base64_encode), otrzymasz

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

i wreszcie GMX pokazuje poprawną reprezentację:

mail3

Plecy