Bonjour à tous.
Voilà mon souçi : j'ai un formulaire de contact (champs votre mail, votre message) qui envoie un message par mail. Or les mails arrivent ds la boite de réception avec des arriv&Eacute au lieu d'arrivé, et tout les accents sont mal encodés de la même façon.

Pour info j'utilise notepad++ (encodé en ANSI) et voilà la déclaration du début de ma page formulaire :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head><title>Chic & pop</title>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />


Pour finir, la page verif.php qui contrôle et envoie le mail au destinataire (j'ai mis des étoiles à la place du mail et de la page appelé) :


<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On protége nos variables
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]));

// On met ici notre email
$destinataire="******@gmail.com";

/* On place le sujet du message qui ici sera toujour le même
puisque dans la partie Html on la mis en caché avec comme valeur
"Vous avez un nouveau message"  */
$objet=$_POST['objet'];

// C'est bon on est OK, vérifion si l'email est valide, grâce à notre chtite REGEX
if(!preg_match($verif,$votremail))
{
        echo "Votre email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")
{
   echo "Y'en a marre des messages vide !";
}

// Si tout est OK on envoie l'email
else
{
        mail($destinataire,$objet,$message,$from);
        Header("Location:  http://www.*******.fr/merci.php");
 
}

?>


Si vous pouviez m'aider, j'ai essayé pas mal de solutions proposées sans jamais toruver la bonne Smiley bawling .
Merci.
Modifié par Vince82 (19 Jun 2007 - 12:19)
Le message est envoyé en HTML ou en texte brut ? Si c'est du texte brut, passer ça par htmlentities() ne me semble pas la meilleure chose à faire.
Oui c'est du texte brut Florent. Tu me conseilles quoi ?
Mes compétences en php sont assez limitées, même si j'y travaille, alors si tu as un script dans le même goût qui n'abimerait pas le texte, voire juste une ligne à changer, je suis preneur Smiley smile .

Modifier simplement le htmlentities pour que le texte garde sa forme originelle ça se fait avec quelle déclaration ?
Modifié par Vince82 (19 Jun 2007 - 10:53)
Vince82 a écrit :
alors si tu as un script dans le même goût qui n'abimerait pas le texte, voire juste une ligne à changer, je suis preneur Smiley smile

Rien de tel sous la main, désolé. Mais une petite recherche devrait te donner quelque chose...

Vince82 a écrit :
Modifier simplement le htmlentities pour que le texte garde sa forme originelle ça se fait avec quelle déclaration ?

Très au pif... :
$from='From: '.$votremail;
$message=stripslashes($_POST["message"]);

Disons que je serai curieux de voir ce que ça donne, mais que je ne garantis pas que ça soit une bonne chose. Smiley cligne

Sinon, il y aura peut-être deux choses à creuser :
- s'assurer que les retours à la ligne sont conservés dans le message envoyé ;
- s'assurer que l'e-mail est bien envoyé avec un en-tête de type :
Content-Type: text/plain; charset=iso-8859-1
J'ai supprimé simplement les htmlentities comme tu me l'as conseillé, eh bien ça marche du tonnerre maintenant !! Les accents sont là.
Merci Florent Smiley biggrin . Les sauts de ligne aussi marchent d'ailleurs.