Formulaire et mail de réponse

Petit nouveau ! | 6 Messages

12 avr. 2011, 08:03

Bonjour à tous,

Je suis novice en PHP et j'ai un soucis avec un formulaire : il marche parfaitement sauf que quand je reçois un mail et que je clique sur "Répondre", le mail de l'expéditeur ne s'affiche pas dans le champs "A:". Voici le script en question et merci d’essayer de me dépanner :

AVANT HTML :

<?php
// Couleur du texte des champs si erreur saisie utilisateur
$color_font_warn="#FF0000";
// Couleur de fond des champs si erreur saisie utilisateur
$color_form_warn="#FFCC66";
// Ne rien modifier ci-dessous si vous n’êtes pas certain de ce que vous faites !
if(isset($_POST['submit'])){
$erreur="";
// Nettoyage des entrées
while(list($var,$val)=each($_POST)){
if(!is_array($val)){
$$var=strip_tags($val);
}else{
while(list($arvar,$arval)=each($val)){
$$var[$arvar]=strip_tags($arval);
}
}
}
// Formatage des entrées
$f_1=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_1)));
$f_2=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_2)));
// Verification des champs
if($erreur==""){
// Création du message
$titre="Message de votre site";
$tete="From:[email protected]\n";
$corps.="E-mail : ".$f_1."\n";
$corps.="Message : ".$f_2."\n";
if(mail("[email protected]", $titre, stripslashes($corps), $tete)){
$ok_mail="true";
}else{
$erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>";
}
}
}
?>

APRES BODY :

<? if($ok_mail=="true"){ ?>
<table width='100%' border='0' cellspacing='1' cellpadding='1'>
<tr><td><span class='txtform'>Le message ci-dessous nous a bien été transmis, et nous vous en remercions.</span></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><span class='txtform'>Nous allons y donner suite dans les meilleurs délais.<br>A bientôt.</span></td></tr>
</table>
<? }else{ ?>
<form action='<? echo $PHP_SELF ?>' method='post' name='Form'>
<table width='100%' border='0' cellspacing='1' cellpadding='1'>
<? if($erreur){ ?><tr><td colspan='2' bgcolor='red'><span class='txterror'><font color='white'><b>&nbsp;ERREUR, votre message n'a pas été transmis</b></font></span></td></tr><tr><td colspan='2'><ul><?echo$erreur?></ul></td></tr><?}?>
<tr><td colspan='2'><span class='txterror'>Les champs marqué d'un * sont obligatoires</span></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>E-mail :</span></td><td><input type='text' style='width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_1' value='<?echo stripslashes($f_1);?>' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Message :</span></td><td><input type='text' style='width:200 <?if($errf_2==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_2' value='<?echo stripslashes($f_2);?>' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'></td><td><input type='submit' name='submit' value='Envoyer' border='0'></td></tr>
</table>
</form>
<? } ?>

ViPHP
xTG
ViPHP | 7331 Messages

12 avr. 2011, 08:05

Essayes à tout hasard avec \r\n à la place de \n à la fin de $tete.

Petit nouveau ! | 6 Messages

12 avr. 2011, 08:51

Ca ne marche pas.

ViPHP
ViPHP | 2577 Messages

12 avr. 2011, 09:54

Bonjour,

Sur les clients mail, il y a la possibilité de voir le source du mail et/ou les entêtes. Compare entre le mail que tu envoies et un autre mail pour voir les différences aux alentours de la ligne "from:"

Petit nouveau ! | 6 Messages

12 avr. 2011, 11:13

Y a pas de différence. Je pense que le problème vient du fait que le champs mail est considéré comme un champs texte et peut-être qu'en modifiant la fonction de ce champs ça résoudrait le problème. En même j'ai un doute sur $tete="From:[email protected]\n"; car si on change après "From:" le mail ne part pas.

ViPHP
ViPHP | 2577 Messages

12 avr. 2011, 11:20

Bonjour,

Il y a forcement une différence puisque ton client mail ne l'interprète pas de la même facon.

Pour ce qui est de la valeur du champ From, il est possible que ton hébergeur filtre pour que le mail soit forcement issue de ton domaine afin de faciliter les recherches en cas de spam. Eventuellement tu peux peux essayer d'ajouter un "replyto" (nom à vérifier)

Eléphant du PHP | 241 Messages

12 avr. 2011, 13:00

Salut,
essaye de rajouter un Reply-to: dans le $tete
// Création du message
$titre="Message de votre site";
$tete = "From: [email protected]\n";
$tete .= "Reply-to: [email protected]\n";
$corps.="E-mail : ".$f_1."\n";
$corps.="Message : ".$f_2."\n";

Petit nouveau ! | 6 Messages

12 avr. 2011, 15:14

Ça ne marche pas non plus mais par contre, si je remplace l'adresse mail par une autre dans ----- $tete .= "Reply-to: [email protected]\n"; ----- genre ----- $tete .= "Reply-to: [email protected]\n"; ----- j'ai bien [email protected] dans la zone A: lorsque je fais Répondre. Donc, peut-être qu'en faisant un lien entre :

<tr><td align='right' width='30%'><span class='txtform'>E-mail :</span></td><td><input type='text' style='width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_1' value='<?echo stripslashes($f_1);?>' size='24' border='0'></td></tr>

et

$tete .= "Reply-to: [email protected]\n";

...ça devrait marcher ? Merci en tous cas pour votre aide !

ViPHP
ViPHP | 2577 Messages

12 avr. 2011, 15:54

Bonjour,

Par hasard, dans $tete="From:[email protected]\n"; il me manquerai pas un blanc derrière le from:
En effet, tu indiques maintenant que le $tete .= "Reply-to: [email protected]\n"; fonctionne avec un blac dans après le Reply-to:

Eléphant du PHP | 241 Messages

12 avr. 2011, 16:01

Logiquement ca ne pose pas de problème qu'il y ai un espace ou non, c'est juste pour une meilleur lecture.

Petit nouveau ! | 6 Messages

12 avr. 2011, 18:22

Effectivement l'espace ne change rien.

Petit nouveau ! | 6 Messages

12 avr. 2011, 20:41

Je viens de trouver et c'est bien $tete .= "Reply-to: [email protected]\n"; qu'il fallait mettre mais avec $f_1 à la place de Testmonsite.fr, ce qui donne :

$tete="Reply-to:$f_1\n";

On retrouve bien $f_1 dans la ligne correspondant à la saisi de l'adresse mail par le visiteur :

<tr><td align='right' width='30%'><span class='txtform'>E-mail :</span></td><td><input type='text' style='width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_1' value='<?echo stripslashes($f_1);?>' size='24' border='0'></td></tr>

Je supposais que ces deux lignes devaient communiquer et donc, par tatonnement, j'y suis arrivé. Merci à tous pour votre aide !