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

Mammouth du PHP | 737 Messages

22 mai 2009, 10:08

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
;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mai 2009, 11:19

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...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 737 Messages

22 mai 2009, 11:25

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
;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mai 2009, 11:31

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 737 Messages

22 mai 2009, 11:43

$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
;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mai 2009, 11:52

Les entités html pourraient effectivement être une solution si ton mail est envoyé en html :)

Y a quoi dans ton $headers ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 737 Messages

22 mai 2009, 11:54

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
;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mai 2009, 12:16

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"; 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 737 Messages

22 mai 2009, 13:03

Re,

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

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

Mega
;)

Eléphant du PHP | 63 Messages

22 mai 2009, 14:06

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
Avec le temps qui s'écoule je trouve que je m'en sort de mieux en mieux :)

Mammouth du PHP | 737 Messages

22 mai 2009, 14:14

Merci mais non, toujours rien. Exemple : Président ...

Mega
;)

Eléphanteau du PHP | 26 Messages

22 mai 2009, 15:08

tu as essayé utf8_encode($lemail) ?

Mammouth du PHP | 737 Messages

27 mai 2009, 01:35

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
;)

ViPHP
AB
ViPHP | 5818 Messages

27 mai 2009, 01:50

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

Mammouth du PHP | 737 Messages

28 mai 2009, 16:00

Non, je vais essayer ce soir...Merci pour cette piste AB.