formatage e-mail en texte brut

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 00:07

Bonjour à tous !

J'ai un formulaire sur mon site avec un champ multi-lignes.

Ce formulaire est envoyé par mail...

Je voudrais que quand la personne appuie sur la touche entrée pour faire un nouveau paragraphe, dans le mail le texte soit formaté à l'identique.

Pour le moment, la seule solution trouvée est celle ci :
$mess=str_replace("<br />","\n",nl2br(stripslashes($_POST['message'])));
En gros, je fais un NL2BR pour mettre des <br /> à chaque fois que la personne fait un nouveau paragraphe, puis je change les <br /> en \n.

Le souci est qu'à chaque nouvelle ligne, j'ai un espace en début du coup...

Y'aurait pas une façon plus adaptée ?


a bientot !

Mammouth du PHP | 19672 Messages

19 août 2005, 00:11

Je comprends pas : tu formates dans un sens et ensuite tu fais l'inverse ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 00:15

Je comprends pas : tu formates dans un sens et ensuite tu fais l'inverse ?
Ben c'est la seule façon d'ajouter des \n à la fin de mes lignes...

Mammouth du PHP | 19672 Messages

19 août 2005, 00:16

Il y sont déjà en principe mais non visibles à chaque fois qu'on appuie sur la touche [Entrée] lors de la rédaction. Donc je ne comprends pas pourquoi tu en rajoutes. N'utilise nl2br() que pour l'envoi, mais travaille avec le texte original non transformé.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 00:22

Il y sont déjà en principe mais non visibles à chaque fois qu'on appuie sur la touche [Entrée] lors de la rédaction. Donc je ne comprends pas pourquoi tu en rajoutes. N'utilise nl2br() que pour l'envoi, mais travaille avec le texte original non transformé.
En fait le souci c'est qu'ils n'ont pas l'air d'y etre car quand je fais un echo de mon $mess, j'ai pas les \n à chaque retour à la ligne, j'ai des espaces à la place...

Mammouth du PHP | 19672 Messages

19 août 2005, 00:27

Attention, si tu fais un echo, le \n est un caractère non imprimable; donc:
essaye echo($var); tout sera sur une seule ligne;

avec echo(nl2br($var)); tu auras les retours de ligne affiché mais la variable n'est pas définitivement midifiée;

$var = nl2br($var); la variable est transformée et là, les \n ne sont plus là.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 00:30

Attention, si tu fais un echo, le \n est un caractère non imprimable; donc:
essaye echo($var); tout sera sur une seule ligne;

avec echo(nl2br($var)); tu auras les retours de ligne affiché mais la variable n'est pas définitivement midifiée;

$var = nl2br($var); la variable est transformée et là, les \n ne sont plus là.
Oui, les \n ne sont plus là mais j'ai des <br /> à la place dans mon mail, vu que je l'envoie en texte brut... et non en HTML...

Donc comment avoir ces retours à la ligne dans mon mail au lieu d'avoir des balises <br /> ?


Encore merci pour tout !

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 00:56

ce que je pige pas, c'est que dans ce qu'il y a autour de mon message je mets des \n et dans mon mail j'ai bien des retours à la ligne mais pour ce champ, rien du tout...


a ++

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 14:27

personne n'a d'idées ?

moi je trouve vraiment rien !!

ça m'énnerve !! :twisted:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 août 2005, 15:48

Mets ça et dit nous ce que tu obtiens:
$mess=$_POST['message'];
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 19672 Messages

19 août 2005, 18:06

Si tu envoies un message avec en type mime text/plain et que tu l'envoies brut sans transformation, les retours de lignes devraient s'afficher normalement sans que tu aies besoin de transformer quoique ce soit.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

mike59
Invité n'ayant pas de compte PHPfrance

19 août 2005, 21:29

je vais essayer de préciser le mime, car c'était pas fait...

je vous tiens au courant !



merci !

mike
Invité n'ayant pas de compte PHPfrance

19 août 2005, 21:48

bon, j'ai testé mais rien à faire, je reçois même pas le mail si je précise le MIME.

Je vous mets mon code complet :
if($_GET['valide']=="ok")
	{
	$nom=$_POST['nom'];
	$prenom=$_POST['prenom'];
	$email=$_POST['email'];
	$tel=$_POST['tel'];
	$offre=$_POST['offre'];
	$mess=$_POST['message'];
	$dest="[email protected]";
	$header="From:$prenom $nom <$email>\r\n";
	$mail="Une demande d'offre web est arrivée...\n\n\nCette demande a été envoyée par $prenom $nom.\n\nSon numéro de téléphone est le : $tel.\n\nSon adresse mail est : $email.\n\n\nSon message est le suivant :\n\n$mess";
	$mailok=mail($dest,$offre,$mail,$header);
	if($mailok) header("Location:".$_SERVER['PHP_SELF']."?envoi=ok"); 
	}
Si vous trouvez la solution......



Merci !

Mammouth du PHP | 19672 Messages

19 août 2005, 23:11

Bon, je viens de faire un essai avec ceci :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body>
<?php
if(isset($_POST['envoi']))
{
    $nom    = $_POST['nom'];
    $prenom = $_POST['prenom'];
    $email  = $_POST['email'];
    $tel    = $_POST['tel'];
    $offre  = $_POST['offre'];
    $mess   = $_POST['message'];
    $dest   = "[email protected]";

    $header  = "From:". $prenom ." ". $nom ." <". $email .">\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-type: text/plain; charset iso-8859-1\r\n";
    $mail = "Une demande d'offre web est arrivée...\n\n\nCette demande a été envoyée par ". $prenom ." ". $nom .".\n\nSon numéro de téléphone est le : ". $tel .".\n\nSon adresse mail est : ". $email .".\n\n\nSon message est le suivant :\n\n". $mess;

    if(mail($dest,$offre,$mail,$header))
    {
        // header("Location:". $_SERVER['PHP_SELF'] ."?envoi=ok");
        echo("<p>L'envoi du message a correctement été effectué.</p>\n");
    }
    else
    {
        echo("<p>L'envoi du message a échoué, veuillez renouveler votre essai ultérieurement.</p>\n");
    }
}
?>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<input type="text" name="nom" value="*******" /><br />
<input type="text" name="prenom" value="******" /><br />
<input type="text" name="email" value="***************" /><br />
<input type="text" name="tel" value="*************" /><br />
<input type="text" name="offre" value="Essai d'envoi en texte brut." /><br />
<textarea name="message" rows="10" cols="40">Bonjour,
Ceci est un essai, je ne suis même pas certain que l'envoi va fonctionner depuis mon serveur local.
Théorquement, il devrait envoyer via un serveur smtp indiqué dans mon fichier de configuration.
On verra bien.
Jean</textarea><br />
<input type="submit" name="envoi" value="Envoyer" />
</form>
</body>
</html>
Ça a pris moins d'une minute pour que je reçoive ceci, copié collé tel quel:
Une demande d'offre web est arrivée...


Cette demande a été envoyée par **********.

Son numéro de téléphone est le : **********.

Son adresse mail est : *****************.


Son message est le suivant :

Bonjour,
Ceci est un essai, je ne suis même pas certain que l'envoi va fonctionner depuis mon serveur local.
Théorquement, il devrait envoyer via un serveur smtp indiqué dans mon fichier de configuration.
On verra bien.
Cyrano
Je n'ai rien remis en page, juste enlevé mes coordonnées personnelles.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

mike59
Invité n'ayant pas de compte PHPfrance

20 août 2005, 00:21

bon...

j'ai essayé d'ajouter ces deux lignes :
    $header .= "MIME-Version: 1.0\r\n"; 
    $header .= "Content-type: text/plain; charset iso-8859-1\r\n"; 
qui sont les seules lignes qui diffèrent réellement de mon code...

et là le mail ne me parvient plus du tout...

peut-être à cause de mon hébergeur : Nuxit ?


ou c'est dû à autre chose ?


a bientot !