Aller au contenu

Aide pour PHP envoi mail


Mr Wolfe

Messages recommandés

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

Voilà, je voudrais envoyer les infos récupérées depuis mon site par mail.

Mais quand je reçoit les mails, les champs sont vides...

Ou est l'erreur ?

La page de récupération d'infos :

<form method=POST action=formmail.php >

<table cellpadding="0" cellspacing="0" border="0">

<tr>

<td valign="top" width="261" height="201"><div style="margin:20 0 0 33px "><img src="images/6_w2.gif" alt="" border="0">

<br>Nom, prénom: <input type="text" style="width:150px; height:21px " name="nom">

<br><br style="line-height:4px ">Société: <input style="width:179px; height:21px " type="text" name="ste">

<br><br style="line-height:4px ">Téléphone: <input style="width:163px; height:21px " type="text" name="tel">

<br><br style="line-height:4px ">e-mail: <input style="width:185px; height:21px " type="text" name="mail"></div></td>

<td valign="top" width="259" height="201"><div style="margin:40 0 0 0px "><textarea name="mess" cols="35" rows="35" style="width:221px; height:102px; overflow:auto ">Message:</textarea>

<br><br style="line-height:6px "><img alt="" src="images/spacer.gif" width="123px" height="1px"><b><input type=reset value="RAZ"> </b><img alt="" src="images/spacer.gif" width="16px" height="1px"><b><input type=submit value="Envoi"></b></div></td>

</tr>

</table></form>

L'envoi de mail :

<?php

$msg = "Nom:\t$nom\n";

$msg .= "Société:\t$ste\n";

$msg .= "Téléphone:\t$tel\n";

$msg .= "Email:\t$mail\n";

$msg .= "Message:\t$mess\n\n";

//

$recipient = "monmail@toto.fr";

$subject = "Formulaire";

$mailheaders = "From: contact site <> \n";

$mailheaders .= "Reply-To: $mail\n\n";

mail($recipient, $subject, $msg, $mailheaders);

Header("Location: http://www.monsitelabonnepage.html");

?>

MERCI !

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Fondateur, Faut Bosser, 33ans Posté(e)
ph0b Fondateur 4 329 messages
33ans‚ Faut Bosser,
Posté(e)

Salut,

remplace

$msg = "Nom:\t$nom\n";
$msg .= "Société:\t$ste\n";
$msg .= "Téléphone:\t$tel\n";
$msg .= "Email:\t$mail\n";
$msg .= "Message:\t$mess\n\n";

par

$msg = "Nom:\t$_POST['nom']\n";
$msg .= "Société:\t$_POST['ste']\n";
$msg .= "Téléphone:\t$_POST['tel']\n";
$msg .= "Email:\t$_POST['mail']\n";
$msg .= "Message:\t$_POST['mess']\n\n";

*à moins que les 'magic quotes' ne soient activés, tu dois passer par $_GET ou $_POST pour récupérer tes variables ;)

Lien à poster
Partager sur d’autres sites

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

J'essaye de suite...

MERCI !!!!!!!!!

Lien à poster
Partager sur d’autres sites

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

Bon, j'ai droit à un message d'erreur :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in \\WAGNER\

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 35ans Posté(e)
Lapinkiller Membre 10 149 messages
35ans‚ Le Dieu Lapin,
Posté(e)

oui logique...

$msg = "Nom:\t".$_POST['nom']."\n";
$msg .= "Société:\t".$_POST['ste']."\n";
$msg .= "Téléphone:\t".$_POST['tel']."\n";
$msg .= "Email:\t".$_POST['mail']."\n";
$msg .= "Message:\t".$_POST['mess']."\n\n";

ca sera mieux comme ca

Lien à poster
Partager sur d’autres sites

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

bon, ca marche.. il aime pas les ' :D

Donc à la finale avec ça :

$msg = "Nom:\t$_POST[nom]\n";

$msg .= "Société:\t$_POST[ste]\n";

$msg .= "Téléphone:\t$_POST[tel]\n";

$msg .= "Email:\t$_POST[mail]\n";

$msg .= "Message:\t$_POST[mess]\n\n";

Ca marche !

Merki !

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 35ans Posté(e)
Lapinkiller Membre 10 149 messages
35ans‚ Le Dieu Lapin,
Posté(e)

de quoi parles tu ?

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 45ans Posté(e)
Pheldwyn Membre 21 633 messages
45ans‚ Explorateur de Nuages,
Posté(e)

Ca marche !

Merki !

Vi ça marche, mais l'écriture de Lapinkiller est plus lisible et logique.

Les index littéraux sans quote, ça m'étonne même que ça marche huh7re.gif

*à moins que les 'magic quotes' ne soient activés, tu dois passer par $_GET ou $_POST pour récupérer tes variables ;)

C'est pas register_globals plutôt ? wink1.gif

Lien à poster
Partager sur d’autres sites

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

Par principe, par ce que je respecte ceux qui savent et se donnent du mal, j'ai mis le code de Lapin, et ça marche nickel !

Donc merci à tous !

:bo:

Lien à poster
Partager sur d’autres sites

Fondateur, Faut Bosser, 33ans Posté(e)
ph0b Fondateur 4 329 messages
33ans‚ Faut Bosser,
Posté(e)

C'est pas register_globals plutôt ? wink1.gif

oui.. je n'ai pas beaucoup dormi ces derniers jours :D

Lien à poster
Partager sur d’autres sites

VIP, Ours des Pyrénées 100% AOC, Posté(e)
Méthylbro VIP 1 038 messages
Ours des Pyrénées 100% AOC,
Posté(e)

ne pas oublier la règle d'or en PHP : NEVER TRUST FOREIGN DATA !

<?php
$msg = "Nom:\t$_POST['nom']\n";
$msg .= "Société:\t$_POST['ste']\n";
$msg .= "Téléphone:\t$_POST['tel']\n";
$msg .= "Email:\t$_POST['mail']\n";
$msg .= "Message:\t$_POST['mess']\n\n";

$recipient = "monmail@toto.fr";
$subject = "Formulaire";
$mailheaders = "From: contact site <> \n";
$mailheaders .= "Reply-To: $_POST['$mail']\n\n";
mail($recipient, $subject, $msg, $mailheaders);
Header("Location: http://www.monsitelabonnepage.html"); 
?> 

Ce code n'est pas sécurisé.

Je pourrais détourner ton formulaire et m'en servir pour envoyer du spam depuis ton serveur. Le tout avec une simple injection.

On dirais du mauvais code copié/collé d'un tuto du site du zéro ^^'

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 45ans Posté(e)
Pheldwyn Membre 21 633 messages
45ans‚ Explorateur de Nuages,
Posté(e)

Ce code n'est pas sécurisé.

Je pourrais détourner ton formulaire et m'en servir pour envoyer du spam depuis ton serveur. Le tout avec une simple injection.

On dirais du mauvais code copié/collé d'un tuto du site du zéro ^^'

Ben avec les register_globals à off, le $recipient et le $subject en variables définies uniquement dans la page, la mail a peu de chance d'arriver ailleurs que dans sa boîte à lui, non ?

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 35ans Posté(e)
Lapinkiller Membre 10 149 messages
35ans‚ Le Dieu Lapin,
Posté(e)

utiliser directement des variable POST sans les faire passer dans une méthode protectrice avant d'utiliser les données, et une faille potentielle ;)

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 45ans Posté(e)
Pheldwyn Membre 21 633 messages
45ans‚ Explorateur de Nuages,
Posté(e)

utiliser directement des variable POST sans les faire passer dans une méthode protectrice avant d'utiliser les données, et une faille potentielle ;)

Certes, mais dans ce cas là, en quoi consisterait l'astuce ? (je pose la question par curiosité, car c'est justement intéressant de mettre à jour ces failles).

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 35ans Posté(e)
Lapinkiller Membre 10 149 messages
35ans‚ Le Dieu Lapin,
Posté(e)

il faut utiliser des méthodes du genre html_entities ;)

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 45ans Posté(e)
Pheldwyn Membre 21 633 messages
45ans‚ Explorateur de Nuages,
Posté(e)

il faut utiliser des méthodes du genre html_entities ;)

Lol, non, l'astuce pour injecter du code.

Lien à poster
Partager sur d’autres sites

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

J'ai bien trouvé des scripts faisant toutes sortes de vérifications, mais :

- je ne suis pas développeur, et ne maitrise pas tous ces trucs

- mon site n'est pas un truc marchand ni une enseigne de multinationale, donc je ne suis pas sur d'attirer les "malfaisants"

- c'est je pense toujours mieux que d'avoir un "mailto", non ?

Toutefois, si une ame charitable veut se donner la peine de sécuriser ce code, je suis ouvert !

Merci encore à ceux qui m'ont aidé.

Lien à poster
Partager sur d’autres sites

VIP, Ours des Pyrénées 100% AOC, Posté(e)
Méthylbro VIP 1 038 messages
Ours des Pyrénées 100% AOC,
Posté(e)

La valeur $_POST['mail'] n'est pas filtrée. Or en injectant du code malicieux, on pourrait se servir de ton formulaire pour envoyer des mails à l'adresse de notre choix, et non plus à monmail@toto.fr.

La fonction mail() de PHP ne traite pas le cas d'injection de code dans les en-têtes de ton mail. Il faut donc penser à le faire soit même.

Quelque chose comme cela pourrait résoudre ce problème :

Ici, j'utilise filter_var() pour vérifier que la variable $_POST['mail'] est une adresse email valide.

<?php
$msg = "Nom:\t$_POST['nom']\n";
$msg .= "Société:\t$_POST['ste']\n";
$msg .= "Téléphone:\t$_POST['tel']\n";
$msg .= "Email:\t$_POST['mail']\n";
$msg .= "Message:\t$_POST['mess']\n\n";

$recipient = "monmail@toto.fr";
$subject = "Formulaire";
$mailheaders = "From: contact site <> \n";
$mailheaders .= "Reply-To: $_POST['mail']\n\n";

if (filter_var($_POST['$mail'], FILTER_VALIDATE_EMAIL)) {
   mail($recipient, $subject, $msg, $mailheaders);
}

Header("Location: http://www.monsitelabonnepage.html"); 

?> 

Enfin, juste pour répondre a Lapinkiller, la fonction html_entities() ne sert absolument pas à filtrer des données en entrée. Mettre des html_entities() partout est une erreur. Cette fonction n'est utile que pour formater une chaîne de caractères.

D'ailleurs si tu regardes bien la documentation de PHP, cette fonction n'est pas classée dans le chapitre "Filter Fonctions" à l'instar de filter_var() mais dans un chapitre "Fonctions sur les chaînes de caractères".

Y'a une grosse différence à mon sens :)

Lien à poster
Partager sur d’autres sites

Membre, Serial shooter, 56ans Posté(e)
Mr Wolfe Membre 5 563 messages
56ans‚ Serial shooter,
Posté(e)

Je vais donc rajouter ce bout de code à "mon" script

if (filter_var(_POST['$mail'], FILTER_VALIDATE_EMAIL)) {

mail($recipient, $subject, $msg, $mailheaders);

}

Histoire que je ne soit pas complètement à coté (pour moi, la programmation s'est arrétée avec l'assembleur et le basic de l'Apple II) :blush:

Ces fonctions de vérifications sont donc résidentes au langage php ?

Il n'est pas nécessaire de recréer une routine à chaque fois alors ?

Merki

PS: si vous avez besoins de tuyaux dans mes domaines de compétences, faut pas hésiter hein :smile2:

Ah ben il en veut pas...

j'ai :

Parse error: syntax error, unexpected

à la première ligne là...

Pas glop pas glop

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 35ans Posté(e)
Lapinkiller Membre 10 149 messages
35ans‚ Le Dieu Lapin,
Posté(e)

La valeur $_POST['mail'] n'est pas filtrée. Or en injectant du code malicieux, on pourrait se servir de ton formulaire pour envoyer des mails à l'adresse de notre choix, et non plus à monmail@toto.fr.

La fonction mail() de PHP ne traite pas le cas d'injection de code dans les en-têtes de ton mail. Il faut donc penser à le faire soit même.

Quelque chose comme cela pourrait résoudre ce problème :

Ici, j'utilise filter_var() pour vérifier que la variable $_POST['mail'] est une adresse email valide.

<?php
$msg = "Nom:\t$_POST['nom']\n";
$msg .= "Société:\t$_POST['ste']\n";
$msg .= "Téléphone:\t$_POST['tel']\n";
$msg .= "Email:\t$_POST['mail']\n";
$msg .= "Message:\t$_POST['mess']\n\n";

$recipient = "monmail@toto.fr";
$subject = "Formulaire";
$mailheaders = "From: contact site <> \n";
$mailheaders .= "Reply-To: $_POST['mail']\n\n";

if (filter_var(_POST['$mail'], FILTER_VALIDATE_EMAIL)) {
   mail($recipient, $subject, $msg, $mailheaders);
}

Header("Location: http://www.monsitelabonnepage.html"); 

?> 

Enfin, juste pour répondre a Lapinkiller, la fonction html_entities() ne sert absolument pas à filtrer des données en entrée. Mettre des html_entities() partout est une erreur. Cette fonction n'est utile que pour formater une chaîne de caractères.

D'ailleurs si tu regardes bien la documentation de PHP, cette fonction n'est pas classée dans le chapitre "Filter Fonctions" à l'instar de filter_var() mais dans un chapitre "Fonctions sur les chaînes de caractères".

Y'a une grosse différence à mon sens :)

et bien tu te trompe, ca peux servir à se protéger de code javascript par exemple

ce n'est pas la solution à tout mais dans certains cas elle peut être utile pour protéger ;)

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×