Problèmes avec la fonction mail (mails HTML)

Problèmes avec la fonction mail (mails HTML) - PHP - Programmation

Marsh Posté le 15-01-2009 à 16:41:46    

Bonsoir à tous,
 
Je développe actuellement un application PHP pour le boulot et j'ai un petit soucis avec la fonction mail. Tout fonctionne parfaitement avec des adresses gmail ou autre, mais avec hotmail, il y a un probleme de codage dans le nom de l'expéditeur ($detxt) et dans l'objet ($objet).  
Tous les paramètres passés à ma fonction ci-dessous sont en utf-8.
 
 
mon code :  
 

Code :
  1. function envoimailhtml($a, $cci, $de, $detxt, $objet, $message)
  2. {
  3. $headers="MIME-Version: 1.0\r\n";
  4. $headers.="Content-type: text/html; charset=utf-8\r\n";
  5. $headers.="From: $detxt <$de>\r\nReturn-Path: $de\r\n";
  6. $headers.="Bcc: $cci\r\n";
  7. if(!mail($a,$objet,$message,$headers))
  8.  return 0;
  9. else
  10.  return 1;
  11. }


 
J'ai donc essayé de décoder l'utf8 dans la fonction mais alors le probleme s'inverse :
 
http://information.ixelles.be/mailhtmlhotmail.jpg


Message édité par zezette le 15-01-2009 à 16:42:20

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Marsh Posté le 15-01-2009 à 16:41:46   

Reply

Marsh Posté le 15-01-2009 à 17:01:33    

J'ai laissé tomber l'UTF-8 dans les mails, pour tout mettre en ISO-8859-1, seule façon que ça fonctionne bien chez hotmail :fou: Enfin du moins les titres hors contenu HTML, lequel est htmlentitiesé jusqu'à la moëlle

Reply

Marsh Posté le 15-01-2009 à 17:07:55    

[:google]
Vu sur le deuxième lien, le pourquoi du comment.
 
Et a priori, on trouve la (seule ?) solution : passer en Latin-1
 
Merci Microsoft  :fou:

Reply

Marsh Posté le 15-01-2009 à 22:09:31    

Moi je suis en UTF8 partout mais avec base64 en plus :
 
=?UTF-8?B? ....... ?=
 
et ça passe sans problème y compris sur hotmail.
 
Yellu

Reply

Marsh Posté le 16-01-2009 à 09:03:22    

[:pingouino] Oh, voilà qui est intéressant [:vapeur_cochonne]

Reply

Marsh Posté le 16-01-2009 à 10:39:46    

yellu > Tu pourrais nous poster un code type de ta solution?

Reply

Marsh Posté le 16-01-2009 à 11:29:15    

Exemple rapide :
 

Code :
  1. $subject = 'Mon subject avec un € et des accents héhé !';
  2. $subject = utf8_encode($subject); // Sauf si vos donnees sont deja en UTF-8, ce que je vous souhaite...
  3. $subject = '=?UTF-8?B?'.base64_encode($subject).'?=';
  4. $mail->addHeader('Subject: '.$subject);


Vous pouvez mettre de l'ISO à la place de l'UTF-8 et vous pouvez aussi utiliser un Q à la place du B dans ce cas vous utiliserez le "quoted_printable_encode" pas toujours dispo en natif, mais pas grand chose recoder.
 
Dans la RFC il est clairement indiquer je crois que tout les caractères des headers doivent être encoder de toute manière, en revanche "spam assassin" pénalise l'abus de telle pratique ce qui est paradoxal, par exemple dans le sujet "bonjour à vous", il ne faudrait idéalement encoder que le "à" pour être nickel et avoir donc une chaîne de type "bonjour =?UTF-8?B?b64duA?= tous".
 
Yellu

Reply

Marsh Posté le 06-05-2009 à 14:21:17    

Finalement, j'ai trouvé une solution :
 

Code :
  1. function envoimailhtml($a, $de, $detxt, $cc, $cci, $objet, $message)
  2. {
  3. //Préférences pour l'encodage mime
  4. $preferences = array(
  5.     "input-charset" => "UTF-8",
  6.     "output-charset" => "UTF-8",
  7.     "line-length" => 255,
  8.     "line-break-chars" => "",
  9.     "scheme" => "Q" );
  10. $headers="MIME-Version: 1.0\r\n";
  11. $headers.="Content-type: text/html; charset=utf-8\r\n";
  12. $headers.=iconv_mime_encode("From","$detxt",$preferences)."<$de>\r\n";
  13. if($cc)
  14.  $headers.="Cc: $cc\r\n";
  15. if($cci)
  16.  $headers.="Bcc: $cci\r\n";
  17. $objet=substr(iconv_mime_encode("","$objet",$preferences)."\r\n",1); //Il faut enlever le :
  18. if(!mail($a,$objet,$message,$headers,"-f".$de))
  19.  return 0;
  20. else
  21.  return 1;
  22. }


 
Il peut maintenant y avoir n'importe quoi dans l'objet ou dans le nom de l'expéditeur, ça passe.
 
Mais dois-je aussi encoder (avec iconv_mime_encode) le contenu du mail (la variable $message) ?
 
Un "é", un "è" ou un "€" dans le texte s'affiche correctement sur tous les clients de messagerie que j'ai testé... (Outlook, Gmail, Hotmail, ...) sauf dans un truc appellé Groupwise où un "é" s'affiche "é" comme si c'était de l'ISO-8859-1 dans lequel on avait tapé un "é" codé en UTF-8...


Message édité par zezette le 06-05-2009 à 14:29:20

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed