[php] envoi de mail par formulaire de contact

envoi de mail par formulaire de contact [php] - PHP - Programmation

Marsh Posté le 05-03-2007 à 16:08:20    

bonjour à tous!
je suis en train de faire un formulaire de contact qui devrait automatiquement etre envoyé dans ma boite mail. J'ai donc créé une page avec un formulaire (contact.php) et une page mail.php qui affiche que le message a été envoyé
voila le code
>>page contact.php

Code :
  1. <form action="mail.php" method="post" name="contact" id="contact" onsubmit="return verif_formulaire(contact)" >
  2.     <input type="hidden" name="destinataire" value="nina_bee@hotmail.fr"  id="destinataire"/>
  3. <input type="hidden" name="objet" value="contact client" id="objet" />
  4. <p>
  5.  <label for="mail" class="formText">Votre adresse e-mail professionnelle: </label><br>
  6. <span class="champs">
  7.       <input name="mail" type="text" id="mail" size="40" />
  8.     </span></p>
  9.   <p>
  10.    <label for="www" class="formText">Votre site web entreprise:</label><br>
  11. <span class="champs">
  12.       <input name="www" type="text" id="www" size="40" />
  13.     </span> </p>
  14.   <p>
  15.    <label for="text" class="formText">Votre message: </label><br>
  16.      <span class="champs">
  17.       <textarea name="text" cols="31" rows="15" id="text" ></textarea>
  18.     </span>
  19.     </p>
  20.   <p>
  21.    <label for="tel" class="formText">Votre numéro de téléphone : </label><br>
  22. <span class="champs">
  23.       <input name="tel" type="text" id="tel" size="40" />
  24.     </span>
  25.   </p>
  26.   <p align="right" class="formText"><input type="submit" value="envoi" name="submit" /></p>
  27.   </form>


 
page mail.php

Code :
  1. <?php
  2. $destinataire = $_POST['destinataire'];
  3. $objet = $_POST['objet'];
  4. $mailclient = htmlentities("From: ".$_POST['mail']);
  5. $siteclient = $_POST['www'];
  6. $message = stripslashes(htmlentities($_POST['text']));
  7. $tel = $_POST['tel'];
  8. ?>
  9. .....du code ici....
  10. <p class="texteNormal"> <?php
  11.        $mail = mail($destinataire,$siteclient,$mailclient,$message,$tel);
  12.        if(isset($mail)){
  13.    echo $destinataire." ".$siteclient." ".$mailclient." ".$message." ".$tel."<br>";
  14.  
  15.    echo "Message envoyé";
  16.    }
  17. ?></p>
  18. <p align="center"><a href="contact.php" class="lien">retour à la page de contact</a>&nbsp;-&nbsp;<a href="index.php" class="lien">retour à la page d'acceuil</a></p>


 
le problème? ben ca marche pas tout simplement.... Et pas d'erreur ni rien mais quand j'ouvre ma boite mail je ne reçois rien
Quelqun saurait il pourquoi?

Reply

Marsh Posté le 05-03-2007 à 16:08:20   

Reply

Marsh Posté le 05-03-2007 à 19:23:33    

Y'a une grave faille de sécurité permettant d'exploiter ton formulaire et de le transformer en robot à spam [:dawa]
 
Ne récupère jamais un destinataire comme ça à partir d'un formulaire, c'est trop facilement truandable. Pour $mailclient, htmlentities ne sert strictement à rien (et peut même tout casser), dans un header mail ce n'est pas de l'html. Utilise plutôt un :

Code :
  1. $mailClient = str_replace(array("\r", "\n" ), '', $_POST['mail']);


Comme ça il sera protégé des inclusions barbares d'header mails.
 
Pour $message aussi, htmlentities ne sert à rien (et provoquera des problèmes d'affichage pour les caractères accentués, vu que le mail est envoyé au format texte).
 
Autre problème, l'appel à la fonction mail est totalement erroné. Rappel de la fonction :

Code :
  1. bool mail ( string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] )


T'as mis tes variables à la suite, du coup dans le sujet se trouvera le site client, dans le message son mail, dans les header le message !?!?!
 
Ca serait plutôt :

Code :
  1. $message = 'Mail : ' . $mailClient . "\n"
  2.   . 'Site : ' . $siteClient . "\n"
  3.   . 'Message : ' . $message . "\n"
  4.   . 'Tel : ' . $tel;
  5. $mail = mail($destinataire, $objet, $message, $mailClient);


Un truc comme ça...
 
 
Aussi, il est courtois et gentil de ne pas afficher directement un message de confirmation, mais plutôt d'utiliser une redirection de type 303 See Other, comme ça si le gars clique sur rafraîchir, il a pas un message pourraxe du genre "renvoyer les donnée post" (mais là ça va être dur, on va se taper à coup sûr des problèmes d'headers ;) )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed