mail () en PHP avec UTF-8 et trémas

La messagerie électronique avec PHP est mieux effectuée avec des classes puissantes comme PHPMailer . Des fonctions d'encapsulation pratiques permettent d'utiliser du contenu en UTF-8 avec quelques lignes de code, d'incorporer des images et d'envoyer des pièces jointes cryptées. Si vous souhaitez économiser la surcharge et, contrairement à la recommandation, utiliser la fonction PHP mail () , vous rencontrerez des problèmes au plus tard lors de l'utilisation des trémas et UTF-8.


Après avoir appelé la fonction avec

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

dans un fichier encodé UTF-8 entraîne déjà des problèmes dans la boîte de réception: Outlook 2013 est toujours courtois et affiche tout correctement:

mail1

Mais déjà GMX ne pardonne pas les en-têtes manquants et montre un sujet, un expéditeur et un contenu infructueux:

mail2

Si vous envoyez les en-têtes corrects (par exemple avec base64_encode), vous obtenez

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

et enfin GMX montre également une représentation correcte:

mail3

Arrière