Rechercher : dans
Par :

Fonction mail php et caractères accentués

Dernière réponse le 3 jun 2009 à 18:40:57 houba_houbi2, le 2 jun 2009 à 18:30:44 
 Signaler ce message aux modérateurs

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

Configuration: Windows Vista
Firefox 3.0.10

Meilleures réponses pour « fonction mail php et caractères accentués » dans :
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
PHP - Mail et fonctions réseau VoirPHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...

1

Harricote, le 2 jun 2009 à 18:38:05

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);
}
?> 
Sans coeur, on ne pas avancer, mais sans jambes, on le peut.
=> Ne vous découragez pas !

Répondre à Harricote

2

houba_houbi2, le 3 jun 2009 à 11:33:57

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

Répondre à houba_houbi2

3

le père, le 3 jun 2009 à 11:50:16

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

Répondre à le père

4

houba_houbi2, le 3 jun 2009 à 12:07:43

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

Répondre à houba_houbi2

5

le père, le 3 jun 2009 à 12:14:12

Il ne fallait pas remplacer les " par des ' mais par des \" ( ce n'est pas du PHP !)

Répondre à le père

6

le père, le 3 jun 2009 à 13:50:21

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.

Répondre à le père

7

le père, le 3 jun 2009 à 14:16:01

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

Répondre à le père

8

houba_houbi2, le 3 jun 2009 à 14:38:42

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 ?

Répondre à houba_houbi2

9

le père, le 3 jun 2009 à 15:08:14

Ç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 ?

Répondre à le père

10

houba_houbi2, le 3 jun 2009 à 16:21:25

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 ?

Répondre à houba_houbi2

11

le père, le 3 jun 2009 à 17:07:49

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

Répondre à le père

12

houba_houbi2, le 3 jun 2009 à 17:42:54

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.... ?

Répondre à houba_houbi2

13

le père, le 3 jun 2009 à 17:50:49

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

Répondre à le père

14

 houba_houbi2, le 3 jun 2009 à 18:40:57

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

Répondre à houba_houbi2