Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2489 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problèmes avec la fonction mail (mails HTML)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problèmes avec la fonction mail (mails HTML)

n°1838508
zezette
"Allez hop, au revoir"
Posté le 15-01-2009 à 16:41:46  profilanswer
 

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
mood
Publicité
Posté le 15-01-2009 à 16:41:46  profilanswer
 

n°1838517
FlorentG
Unité de Masse
Posté le 15-01-2009 à 17:01:33  profilanswer
 

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

n°1838523
macgawel
Posté le 15-01-2009 à 17:07:55  profilanswer
 

[: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:

n°1838645
yellu
Posté le 15-01-2009 à 22:09:31  profilanswer
 

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

n°1838739
FlorentG
Unité de Masse
Posté le 16-01-2009 à 09:03:22  profilanswer
 

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

n°1838788
omega2
Posté le 16-01-2009 à 10:39:46  profilanswer
 

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

n°1838813
yellu
Posté le 16-01-2009 à 11:29:15  profilanswer
 

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

n°1881415
zezette
&#034;Allez hop, au revoir&#034;
Posté le 06-05-2009 à 14:21:17  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problèmes avec la fonction mail (mails HTML)

 

Sujets relatifs
tableau html[avis] Faire un site pro en HTML en 2009 ?
[Résolu] Récupération de mails en Imap et sauts de ligneLister les différents champs d'un parametre d'une fonction. Possible ?
fonction prédéfinie de décalage en xilinxCréer une page de dispatch en php en fonction de l'url saisie
Fonction ou variable PHP pour racine du site?Le HTML pour des pages dynamiques ?
Erreur dans une fonction MAXArboresence fichiers html ,php et liens
Plus de sujets relatifs à : Problèmes avec la fonction mail (mails HTML)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR