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

Résolu
benoitXV Messages postés 241 Statut Membre -  
 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
Configuration: Windows XP
Firefox 2.0.0.14

9 réponses

  1. Laugarhraun Messages postés 18 Statut Membre 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
    1. 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
    2. 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
    3. incode Messages postés 11 Statut Membre
       
      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
    4. Clem81
       
      ou
      mb_internal_encoding('UTF-8');
      $subject = mb_encode_mimeheader($subject);
      0
  2. 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
    1. houhou
       
      merci beaucoup tu ma sauvé
      0
    2. houhou
       
      tu es fort vraiment
      0
    3. Jéjé
       
      Yesss, c'est la solution qui a marché pour moi. Merci.
      0
    4. yoyo
       
      Merci beaucoup et ça marche très bien !
      0
    5. etiliaad
       
      marche nickel contrairement à mb_encode_mimeheader
      0
  3. benoitXV Messages postés 241 Statut Membre 17
     
    En fait c'etais l'inverse.

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

    merci
    4
    1. arnaudligth
       
      ça veux dire que ça marche?
      lequel htmlentities ou html_entity_decode()?
      0
  4. benoitXV Messages postés 241 Statut Membre 17
     
    c'est html_entity_decode()
    4
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. 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
    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
  8. benoitXV Messages postés 241 Statut Membre 17
     
    j'ai bien essayé htmlentities(mon_sujet, ENT_QUOTES,'UTF-8');
    mais c'est pire.
    -1
  9. 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