Fonction mail php et caractères accentués [Résolu/Fermé]

Signaler
-
 Utilisateur anonyme -
Bonjour,

J'ai une page html en utf8 avec un formulaire de contact, donc un texte de message libre.
Je récupère ce message par la fonction mail php dans Outlook.
Les caractères accentués : é"'èçàù s'affichent é\'èù

Ce problème vient de l'expédition ou de la réception du message ?

J'ai trouvé tout un tas de truc sur les headers, type mime, mais ça ne me parle pas ;-)
J'ai testé différentes options trouvés sur le net, en vain...

Voici mon code actuel :
<?php
if(isset($_POST['envoyer']))
{
$nom = $_POST['nom'];
$email_expediteur = $_POST['email'];
$message = $_POST['message'];
$email_destinataire = "xxxxxx";
$subject = "Vous avez un nouveau message";
$headers = "From: $nom <$email_expediteur> \n";
$headers .= "Reply-To: $email_expediteur \n\n";
$body = "$message \n";
echo "<div class='message'>Votre message a été envoyé ! Merci</div>";
mail($email_destinataire, $subject, $body, $headers);
}
?>

Merci d'avance pour votre aide

14 réponses


Verdict ! sur Outlook2002 et webmail Yahoo, c'est parfait !!!
C'est donc bien mon Outlook2007 qui @?!#@?§!
Désolé de t'avoir fait perdre autant de temps, et je te remercie pour ta patience et ton aide précieuse.
Je n'ai plus qu'à farfouiller dans les paramètres de la messagerie
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
417
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
30 janvier 2011
41
Salut !

essaye ceci :
<?php
if(isset($_POST['envoyer']))
{
$nom = $_POST['nom'];
$email_expediteur = $_POST['email'];
$message = $_POST['message'];
$email_destinataire = "xxxxxx";
$subject = "Vous avez un nouveau message";
$headers = "From:".$nom." <".$email_expediteur."><br/>";
$headers .= "Reply-To:".$email_expediteur"<br/><br/>";
$body = $message."<br/>";
echo "<div class='message'>Votre message a &eacute;t&eacute; envoy&eacute; ! Merci</div>";
mail($email_destinataire, $subject, $body, $headers);
}
?> 

Bonjour et merci Haricotte,
Apparement la modif est uniquement de changer les /n en <br/ > ?
Là c'est pire, car je ne reçois plus de message !!

Quelqu'un peut m'aider ?
Merci
Bonjour

surtout pas de balises html dans des entêtes de courier, c'est absurde. Il fait laisser les \n. Normalement d'après la doc PHP c'est même \r\n

Pour tes problèmes d'accents, si tu écris en UTF8, il suffit de le préciser dans les entêtes :

$headers = "From: $nom <$email_expediteur> \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain;\r\n";
$headers .= "\tformat=flowed;\r\n";
$headers .= "\tcharset="utf-8";\r\n";
$headers .= "\treply-type=original\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "Reply-To: $email_expediteur"; // pas de \r\n à la fin PHP s'en charge

Bonjour et merci Le Pere pour ton message

Il y avait un pb de string à la ligne "utf-8", j'ai changé les " par des '
Je reçois les informations des headers dans le corps du message !?!
Voici ce que je reçois (j'ai effacé les infos ID... par sécurité) :

Content-Type: text/plain;

format=flowed;

charset='utf-8';

reply-type=original

Content-Transfer-Encoding: 8bit

Reply-To: example@example.com
Message-Id: <............................>
Date: Wed, 3 Jun 2009 11:57:21 +0200 (CEST)
X-Ovh-Tracer-Id: ................................
X-Ovh-Remote: ..................... (.............)
X-Ovh-Local: ..................... (.............)
X-Spam-Check: DONE|H 0.5/N

message

&é\'èçà ù <------ là c'est mon message avec les caractères accentués !!!

Merci
Il ne fallait pas remplacer les " par des ' mais par des \" ( ce n'est pas du PHP !)
Après essai, " et ' ne font pas de différence chez moi, bien que le standard dise " (enfin, c'est ce que je crois lire)
Par contre il semblerait que certains agents SMTP préfèrent le \n seul entre les headers (là encore malgré la RFC), réessaye avec de \n au lieu de \r\n.
Autre essai :
le 'utf8' donne un affichage correct sur mon webmail (yahoo) mais pas sur outlook express ( é au lieu de é )
alors que "utf8" donne le bon affichage dans les 2 cas. donc les doubles-quotes sont bien préférables

Merci pour tes essais !!
euh oui effectivement avec les ', " et \" on s'y perd ;-)

Donc avec ceci, ça marche (ça ne marchait pas avec les \r\n) :
$headers = "From: $nom <$email_expediteur>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain;\n";
$headers .= "\tformat=flowed;\n";
$headers .= "\tcharset=\"utf-8\";\n";
$headers .= "\treply-type=original\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "Reply-To: $email_expediteur"; // pas de \r\n à la fin PHP s'en charge
Mais.... oui il y a un mais, maintenant j'ai des caractères accentués comme cela : ����
Pour info je suis sur Outlook (pro), c'est peut-être différent de Outlook Express ?
Ça n'a pas de raison d'être différent entre Outlook express et Outlook. Enfin, je n'en vois pas.
Tu es sûr que tu envoies bien encore de l'UTF8 ?
Quand tu regardes ton message dans Outlook, clique sur Affichage - Codage (si c'est comme outlook express). Que vois-tu ?

J'ai vérifié comme tu me l'as demandé (j'ai pas le même menu avec la version 2007) :
Le message est bien reçu en codage utf8 (et les anciens étaient en codage alphabet occidental Windows).

Dans l'option du message, j'ai la possibilité de changer l'encodage, si je repasse par occidental et que je reviens sur utf8, il me change les ? par mes caractères accentués). Bizarre ??

Donc l'utf8 passe bien, cela doit venir du client messagerie ? Peut-être un paramètrage par défaut à changer qq part ?
Je viens de faire l'essai avec Outlook et chez moi ça marche. Peux-tu faire un essai en remplaçant ta variable $body par un petit texte avec un accent , genre
mail($email_destinataire, $subject, "été", $headers);
Au passage, je viens de remarquer que tu ajoutes un <br/> à la fin du $body, c'est inutile car le message que tu envoies est en texte simple, pas en HTML

voilà j'ai fait le test, je reçois toujours des ? à la place des accents...
Si ça marche chez toi, c'est que c'est mon OutlookPro qui interprête.... à sa façon.... ?
Peux-tu envoyer lire les messages envoyés avec un autre client qu'outlook ou avec un webmail ? Ou envoie quelque chose à un de tes amis avec ton script, qu'il te dise si c'est correct chez lui.
Je commence sérieusement à être à court d'idées :-(