Page 1 sur 2

fonction mail, problème de charset chez certains FAI...

Posté : 22 mai 2009, 10:08
par Megadeth
Bonjour,

Je n'arrive pas à comprendre d'où peut venir le problème. J'ai une fonction mail standard ou plus avancée sous la main qui fonctionne bien (je reçois les mails) mais sur free notamment impossible d'avoir le bon affichage. J'ai beau mettre n'importe quel charset j'ai toujours des coquilles sur les caractères accentués, particuliers...

Dans mon dernier essai sur free :

é pour le é
ç pour le ç
ê pour le ê
...

J'ai essayé utf-8, charset=iso-8859-1...rien à faire.

Ca peut venir de quoi ? Que faire ?

:idea: Merci de votre aide !

Mega
;)

Posté : 22 mai 2009, 11:19
par Ryle
Lorsque tes "é" se transforment en "é", tu peux être sur qu'il y a de l'utf8 qui se cache quelque part :)

A partir de là, il faut rester cohérent entre les entêtes du fichier (que ce soit un mail ou une page html) et son contenu. J'ai l'impression que tu envois un mail en utf-8 et que ton client de messagerie tente de le lire en iso...

Posté : 22 mai 2009, 11:25
par Megadeth
Bonjour Ryle,

Ma page d'envoi est en utf-8, mon script d'envoi est en utf-8 (les entêtes) et l'affichage merde dans la boite mail :?

Mega
;)

Posté : 22 mai 2009, 11:31
par Ryle
Vi mais qu'en est-il du contenu de ce que tu envois dans le mail ? :)

C'est un texte en dur dans ton script ? ça provient d'une bdd ? d'un fichier externe ?

Tu peux essayer d'y mettre un coup d'utf8_encode ou utf8_decode et vérifier le charset spécifié dans l'entête du mail :)

Posté : 22 mai 2009, 11:43
par Megadeth
$lemail = mail($_POST["destina_mail"],"Perte du mot de passe","Salut,\n
Action, réaction !\n
Ci-dessous ton mot de passe : c'était pas ça par hasard ?\n
".$rows["password"]."\n
Pas la peine de me remercier, je suis là pour ça\n
A+\n",$headers);
C'est ça mon message. Besoin de mettre un utf8_encode sur le champ password ? C'est de l'utf-8 en base.

Je vois mettre des entités html à la place du texte accentué ?

Merci de ton aide, t'es un chef ;)

Mega
;)

Posté : 22 mai 2009, 11:52
par Ryle
Les entités html pourraient effectivement être une solution si ton mail est envoyé en html :)

Y a quoi dans ton $headers ?

Posté : 22 mai 2009, 11:54
par Megadeth
Re,

Voilà
$headers = 'MIME-Version: 1.0\n';
$headers .= 'Content-Type: text/html; charset="UTF-8"\n'; 
$headers .= 'Content-Transfer-Encoding: 8bit\n';
ca m'affiche : réaction. Tu entendais bien é pour é ?

Mega
;)

Posté : 22 mai 2009, 12:16
par Ryle
Yep ! :)

Je pense que ton soucis vient bien de l'entête du mail. Il faut savoir que le \n n'est interprété correctement en php que lorsqu'il est placé entre guillemets et pas entre apostrophes (comme pour les variables en fait)

Essayes comme ceci :
$headers = 'MIME-Version: 1.0' . "\n"; 
$headers.= 'Content-Type: text/html; charset="UTF-8"' . "\n"; 
$headers.= 'Content-Transfer-Encoding: 8bit' . "\n"; 

Posté : 22 mai 2009, 13:03
par Megadeth
Re,

Désolé Ryle, ca ne marche toujours pas #-o

J'ai beau trituré le code dans tous les sens...

Mega
;)

Posté : 22 mai 2009, 14:06
par consequences
Salut a toi,

suis pas un pro mais essaye plutot comme ca :


$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset="UTF-8"\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";

avec des doubles cotes en fait au lieu des simple cote

Posté : 22 mai 2009, 14:14
par Megadeth
Merci mais non, toujours rien. Exemple : Président ...

Mega
;)

Posté : 22 mai 2009, 15:08
par ludwig
tu as essayé utf8_encode($lemail) ?

Posté : 27 mai 2009, 01:35
par Megadeth
Re sur ce topic,

Apparemment les htmlentities() et autres dans une fonction mail ne fonctionne pas chez free, j'ai toujours des soucis :?

J'ai fait ceci :
$message = stripslashes($_POST["message"]);
$message2 = htmlspecialchars($message);//ou autre
$mail = mail("monadresse","test",$message2,$entetemail);
Mes entêtes de page (utf8 of course) et entête mail :
$from_email = $_POST["mail"];
$entetedate = date("D, j M Y H:i:s -0600");
$entetemail = "From: $from_email \n";
$entetemail .= "Cc: \n";
$entetemail .= "Bcc: \n";
$entetemail .= "Reply-To: $from_email \n";
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$entetemail .= "Date: $entetedate"; 
$entetemail .= "MIME-Version: 1.0\n";
$entetemail .= "Content-Type: text/html; charset=\"UTF-8\"\n";
$entetemail .= "Content-Transfer-Encoding: 8bit\n";  
So, je vois pas ? Ereg_replace fastidieux ?

Mega
;)

Posté : 27 mai 2009, 01:50
par AB
Tu n'as pas à utiliser htmlentities() ni htmlspecialchars() pour l'envoi de ton mail.

Par ailleurs as-tu mis header('Content-Type: text/html; charset=UTF-8'); au début de ta page php
et mysql_query("SET NAMES 'utf8'"); juste après la conexion à ta bdd ?

Un petit tuto sur l'utf8 ici

Posté : 28 mai 2009, 16:00
par Megadeth
Non, je vais essayer ce soir...Merci pour cette piste AB.