Mail() php probléme d'accent dans sujet
Résolu
benoitXV
Messages postés
227
Date d'inscription
Statut
Membre
Dernière intervention
-
krmasson -
krmasson -
Bonjour,
J'ai un problème (souvent évoqué I Know!)
J'envoi un mail (en php) dont les éléments sont importé depuis une base postgresql.
Le corps du message (qui contient des caractères accentués) est correct a la reception de e-mail.
Mais le sujet me donne "Validation de l'inscription sur A\&\eacute;ro-dico." à la place de
"Validation de l'inscription sur Aéro-dico."
Si je fait un echo sur la chaine de caractère correspondante au sujet. Le resultat est correcte.
Je seche...
mon header:
$headers="From: aero-dico \n";
$headers.="Reply-To: \n";
$headers.= "MIME-version: 1.0\n";
$headers.= "Content-type: text/html; charset= UTF-8\n";
merci d'avance
J'ai un problème (souvent évoqué I Know!)
J'envoi un mail (en php) dont les éléments sont importé depuis une base postgresql.
Le corps du message (qui contient des caractères accentués) est correct a la reception de e-mail.
Mais le sujet me donne "Validation de l'inscription sur A\&\eacute;ro-dico." à la place de
"Validation de l'inscription sur Aéro-dico."
Si je fait un echo sur la chaine de caractère correspondante au sujet. Le resultat est correcte.
Je seche...
mon header:
$headers="From: aero-dico \n";
$headers.="Reply-To: \n";
$headers.= "MIME-version: 1.0\n";
$headers.= "Content-type: text/html; charset= UTF-8\n";
merci d'avance
A voir également:
- Accent php
- E accent minuscule - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Comment faire un accent circonflexe sur un clavier azerty ✓ - Forum Clavier
- Comment mettre l'accent circonflexe sur e ou ✓ - Forum Réseaux sociaux
9 réponses
Bonjour,
Bien que le sujet soit vieux, une rechercher de "accent sujet mail" dans google renvoie cette page en premier résultat.
Une fonction PHP encodera votre sujet comme vous le désirez : mb_encode_mimeheader()
Bien que le sujet soit vieux, une rechercher de "accent sujet mail" dans google renvoie cette page en premier résultat.
Une fonction PHP encodera votre sujet comme vous le désirez : mb_encode_mimeheader()
Pour que le sujet du mail prennent bien en compte les accents, il faut ajouter devant utf8_decode.
Ce qui donne :
$headers ='From: "Contact"<contact@contact.com>'."\n";
$headers .='Reply-To: contact@contact.com'."\n";
$headers .='Content-Type: text/html; charset="UTF-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet = utf8_decode('RemplaClinic : Clôture de la demande du');
mail('email@email.com', $sujet, 'Mon message', $headers);
Et voila plus de souci avec l'accent dans le sujet.
Ce qui donne :
$headers ='From: "Contact"<contact@contact.com>'."\n";
$headers .='Reply-To: contact@contact.com'."\n";
$headers .='Content-Type: text/html; charset="UTF-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$sujet = utf8_decode('RemplaClinic : Clôture de la demande du');
mail('email@email.com', $sujet, 'Mon message', $headers);
Et voila plus de souci avec l'accent dans le sujet.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour ma part aucune des solutions exposées ne fonctionnait avec le sujet suivant : "Message envoyé à Pascal" car
- Soit le sujet était affiché correctement par le client mail mais le mail était affécté par l'Antispam d'une erreur liée à un caractére illégal dans le sujet (BAD HEADER SECTION, Non-encoded 8-bit data)
- soit le mail était 'clean' pour l'Antispam mais le sujet était incorrectement affiché par le client mail.
J'ai utilisé cela :
$sujet = utf8_decode($sujet);
$sujet= mb_encode_mimeheader($sujet,"UTF-8", "B", "\n");
et cela fonctionne correctement
Si l'un de vous peut m'aider à comprendre pourquoi, cela serait mieux....
- Soit le sujet était affiché correctement par le client mail mais le mail était affécté par l'Antispam d'une erreur liée à un caractére illégal dans le sujet (BAD HEADER SECTION, Non-encoded 8-bit data)
- soit le mail était 'clean' pour l'Antispam mais le sujet était incorrectement affiché par le client mail.
J'ai utilisé cela :
$sujet = utf8_decode($sujet);
$sujet= mb_encode_mimeheader($sujet,"UTF-8", "B", "\n");
et cela fonctionne correctement
Si l'un de vous peut m'aider à comprendre pourquoi, cela serait mieux....
"pour moi ce qui fonctionne c'est d'utiliser mb_encode_mimeheader() avec utf8_decode() :
$subject = utf8_decode($subject);
$subject = mb_encode_mimeheader($subject,"UTF-8");"
Je confirme que cela marche avec tous les clients mail que j'ai pu tester : outlook, gmail, yahoo et même l'appli mail de windows 8 qui me posait tant de problèmes!
MERCI!
$subject = utf8_decode($subject);
$subject = mb_encode_mimeheader($subject,"UTF-8");"
Je confirme que cela marche avec tous les clients mail que j'ai pu tester : outlook, gmail, yahoo et même l'appli mail de windows 8 qui me posait tant de problèmes!
MERCI!
Merci, 7 ans que ce truc m'em...ait.
Pour info (c'est facile d'expliquer une fois que ça marche :-) ), le utf8_decode convertit la chaîne en iso-latin, et mb_encode se charge ensuite de l'escaper, après l'avoir convertie en UTF-8.
mb_encode attend apparemment uniquement de l'iso-latin1 en entrée.
Le troisième paramètre ('Q' ou 'B' spécifie le format d'escapage (Q pour Base64, B pour Quoted printable (tous les caractères autres que A-Z a-z sont transformés en =XX)).
Seul inconvénient, ça n'encode pas le 'oe', qui n'appartient pas à l'iso8859-1, mais je vais vivre avec...
Pour info (c'est facile d'expliquer une fois que ça marche :-) ), le utf8_decode convertit la chaîne en iso-latin, et mb_encode se charge ensuite de l'escaper, après l'avoir convertie en UTF-8.
mb_encode attend apparemment uniquement de l'iso-latin1 en entrée.
Le troisième paramètre ('Q' ou 'B' spécifie le format d'escapage (Q pour Base64, B pour Quoted printable (tous les caractères autres que A-Z a-z sont transformés en =XX)).
Seul inconvénient, ça n'encode pas le 'oe', qui n'appartient pas à l'iso8859-1, mais je vais vivre avec...
Merciiiiiiii encore !
Ne pas oublier, bien sûr, la dernière ligne des headers :
" $headers .='Content-Transfer-Encoding: 8bit'; "
mb_encode_mimeheader() ne marche pas dans mon cas...
mb_internal_encoding('UTF-8');
$subject = mb_encode_mimeheader($subject);