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

Résolu
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. 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. 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. 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. 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. ou
      mb_internal_encoding('UTF-8');
      $subject = mb_encode_mimeheader($subject);
      0
  2. 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. merci beaucoup tu ma sauvé
      0
    2. tu es fort vraiment
      0
    3. Yesss, c'est la solution qui a marché pour moi. Merci.
      0
    4. Merci beaucoup et ça marche très bien !
      0
    5. marche nickel contrairement à mb_encode_mimeheader
      0
  3. En fait c'etais l'inverse.

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

    merci
    4
    1. ça veux dire que ça marche?
      lequel htmlentities ou html_entity_decode()?
      0
  4. c'est html_entity_decode()
    4
    1. 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
      1. "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. 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
      2. j'ai bien essayé htmlentities(mon_sujet, ENT_QUOTES,'UTF-8');
        mais c'est pire.
        -1
        1. 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