Voici un petit exemple en PHP d'un script d'envoi de mail, permettant de gérer dynamiquement chaque champ d'envoi.
Le but de ce script est de vous fournir un exemple de script ou toutes les variables de la fonction mail() sont passées en dynamique, et sécurisées contre l'injection de spams.
Vous pouvez à loisir le personnaliser, et fixer en dur certaines variables (expediteur, destinataire, …) pour vos propres besoins, mais n'oubliez pas de sécuriser correctement votre script en fonction du nom de vos variables.
Commençons par créer le formulaire permettant de composer son mail, nommé formulaire.php :
<html> <head> <!-- Le titre de la page --> <title>.:: Formulaire d'envoi de mails ::.</title> <!-- Feuille de style, pour le côté graphique --> <link rel="stylesheet" type="text/css" href="nfrance.css"> </head> <body> <!-- Titre de la page --> <div class="titre">.:: Formulaire d'envoi de mails ::.</div> <div class="barre"> </div> <!-- Déclaration du formulaire --> <form method="post" action="envoi.php"> <table> <tr> <td>De : </td> <td><input type="text" name="de" value="Votre adresse email"></td> </tr> <tr> <td>A : </td> <td><input type="text" name="a" value="L'adresse email de votre contact"></td> </tr> <tr> <td>Sujet : </td> <td><input type="text" name="sujet" value="Sujet de votre mail"></td> </tr> <tr> <td>Message : </td> <td><textarea name="message" rows=5>Votre message</textarea></td> </tr> <tr> <td></td> <td><input type="submit" value="Envoyer"></td> </tr> </table> </form> </body> </html>
Voici ce que ce code donne à l'écran (avec la feuille de style
) :
Passons à présent au code de traitement de ce formulaire, dans la page nommée envoi.php :
<? /*********************************************************** * Fonction pour vérifier la validite d'un mail * * - on check la présence de caractères spéciaux * * - on vérifie que le domaine ait un enregistrement DNS * ***********************************************************/ function check_email_mx($email) { if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) { $host = explode('@', $email); if(checkdnsrr($host[1].'.', 'MX') ) return true; if(checkdnsrr($host[1].'.', 'A') ) return true; if(checkdnsrr($host[1].'.', 'CNAME') ) return true; } return false; } /*********************************************************************** * Verification des champs du mail * * - on check la présence champs multi-lignes * * - cf : http://www.phpsecure.info/v2/article/MailHeadersInject.php * ***********************************************************************/ function verify($champ) { if (eregi("\r",$champ) || eregi("\n",$champ)){ return true; } return false; } /************************************************************************* * Gestion des erreurs * * - appel aux fonctions précédentes et définition du message d'erreur * *************************************************************************/ //Gestion des erreurs if (($_POST['de'] == null) || ($_POST['a'] == null) || ($_POST['sujet'] == null) || ($_POST['message'] == null)) $erreur = "Veuillez renseigner tout les champs"; if (!check_email_mx($_POST['de']) || !check_email_mx($_POST['a'])) $erreur = "Adresse email invalide"; if (verify($_POST['de']) || verify($_POST['a']) || verify($_POST['sujet'])) $erreur = "Les champs multi-lignes sont interdits"; ?> <html> <head> <title>.:: Formulaire d'envoi de mails ::.</title> <link rel="stylesheet" type="text/css" href="nfrance.css"> </head> <body> <div class="titre">.:: Formulaire d'envoi de mails ::.</div> <div class="barre"> </div> <? if (isset($erreur)) echo $erreur; else { // Envoi effectif du mail, après avoir vérifié la sécurité de chaque champ if (mail($_POST['a'], $_POST['sujet'], $_POST['message'], "From: ".$_POST['de']."\n")); echo "Votre email a ete envoye a : ".$_POST['a']; } ?> <br><a href="javascript:history.back()">Retour</a> </body> </html>
Voici le résultat de l'envoi d'un email, lorsque tout les champs sont valides ; l'un des messages d'erreur défini dans le script est affiché si un problème a été rencontré :
Ce code est un simple petit exemple mais peut tout a fait être adapté à des besoins divers, comme l'écriture d'un formulaire de contact sécurisé, en placant en dur votre adresse destinataire par exemple.
Et voici l'archive contenant ces fichiers.
Bon code
L'équipe NFrance