Mail() php probléme d'accent dans sujet

Résolu
benoitXV Messages postés 227 Date d'inscription   Statut Membre Dernière intervention   -  
 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
A voir également:

9 réponses

Laugarhraun Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   44
 
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()
40
memelo
 
Merci beaucoup Laugarhraun !! J'ai essayé toutes les solutions du dessus avec d'appliquer la tienne et je commencais à désespérer... Ta solution devrais se retrouver en tete de ce poste !!
Merciiiiiiii encore !
0
SomeoneOnTheWeb
 
Pour moi c'est la solution de Krol17 qui fut la plus efficace. ;)

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...
0
incode Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
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");
0
Clem81
 
ou
mb_internal_encoding('UTF-8');
$subject = mb_encode_mimeheader($subject);
0
krol17
 
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.
26
houhou
 
merci beaucoup tu ma sauvé
0
houhou
 
tu es fort vraiment
0
Jéjé
 
Yesss, c'est la solution qui a marché pour moi. Merci.
0
yoyo
 
Merci beaucoup et ça marche très bien !
0
etiliaad
 
marche nickel contrairement à mb_encode_mimeheader
0
benoitXV Messages postés 227 Date d'inscription   Statut Membre Dernière intervention  
 
En fait c'etais l'inverse.


html_entity_decode($mon_sujet, ENT_QUOTES,'UTF-8');


merci
4
arnaudligth
 
ça veux dire que ça marche?
lequel htmlentities ou html_entity_decode()?
0
benoitXV Messages postés 227 Date d'inscription   Statut Membre Dernière intervention  
 
c'est html_entity_decode()
4

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arnaudligth
 
htmlentites() ?
2
wikimaginot.eu
 
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....
1
mat1984
 
"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!
1
krmasson
 
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...
0
benoitXV Messages postés 227 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai bien essayé htmlentities(mon_sujet, ENT_QUOTES,'UTF-8');
mais c'est pire.
0
jomase
 
bonjour, au cas où ça intéresse quelqu'un,
même problème sur le sujet mais uniquement si le destinataire est sur mac ou ipad, le corps lui est correct et en iso-8859-15. Pas de problème sur windows.
0