Aller au contenu | Aller au menu | Aller à la recherche


PHP mail sujet correctement encodé

Comment éviter d'avoir des caractères spéciaux illisibles dans le sujet lors de l'envoi de mail avec php ?

La commande mail( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Pour le sujet il est précisé de suivre l'encodage tel que le spécifie la RFC 2047.

Encodings

  Initially, the legal values for "encoding" are "Q" and "B".  These
  encodings are described below.  The "Q" encoding is recommended for
  use when most of the characters to be encoded are in the ASCII
  character set; otherwise, the "B" encoding should be used.
  Nevertheless, a mail reader which claims to recognize 'encoded-word's
  MUST be able to accept either encoding for any character set which it
  supports.

  The "B" encoding automatically meets these requirements.  The "Q"
  encoding allows a wide range of printable characters to be used in
  non-critical locations in the message header (e.g., Subject), with
  fewer characters available for use in other locations.
//die(mb_internal_encoding());	// ISO-8859-1
 
/* Utilise l'encodage interne UTF-8 */
mb_internal_encoding("UTF-8");
 
/* Affiche l'encodage interne courant */
//die(mb_internal_encoding());	// UTF-8

Par défaut, dépends de la conf de php.ini :

[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1

L'envoi de votre mail :

$subject = "Mon sujet avec des caractères bien français :) ho yé ho yé !";
		$subject = mb_encode_mimeheader($subject,"UTF-8", "B", "\n");
		$message = "Mon blabla UTF-8 tout comme mon fichier php source écrit en UTF 8 français."
		$additional_headers = 'Content-type: text/plain; charset=UTF-8' . "\r\n";
		mail("votre.mail@votre.domaine", $subject, $message, $additional_headers);

Ainsi le si vous regardez le source du mail :

Le sujet : "données différentes"

qui était envoyé comme suit :

Subject: Alerte : données différentes : 220583 / 205295

deviendra :

Subject: Alerte  : =?UTF-8?B?ZG9ubsOpZXMgZGlmZsOpcmVudGVzIDogMjIwNjEz?=  =?UTF-8?B?IC8gMjA1NjY4?=

Et votre sujet sera correctement lu par les différents clients de messagerie, Outllook, Gmail, Zimbra, etc...

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet