Fonction mail php et caractères accentués

Résolu/Fermé
Utilisateur anonyme - 2 juin 2009 à 18:30
 Utilisateur anonyme - 3 juin 2009 à 18:40
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
A voir également:

14 réponses

Utilisateur anonyme
3 juin 2009 à 18:40
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
Harricote Messages postés 417 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 30 janvier 2011 41
2 juin 2009 à 18:38
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);
}
?> 
0
Utilisateur anonyme
3 juin 2009 à 11:33
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
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
3 juin 2009 à 12:07
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
0
Il ne fallait pas remplacer les " par des ' mais par des \" ( ce n'est pas du PHP !)
0
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.
0
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
0
Utilisateur anonyme
3 juin 2009 à 14:38
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 ?
0
Ç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 ?
0
Utilisateur anonyme
3 juin 2009 à 16:21
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 ?
0
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
0
Utilisateur anonyme
3 juin 2009 à 17:42
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.... ?
0
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 :-(
0