// Page : contact.php
//doit être en UTF-8 sans bom
//mettez ici votre adresse mail
//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire
$votre_adresse_mail = 'votreemail@votresite.tld';
// si le bouton "Envoyer" est cliqué
if(isset($_POST['envoyer'])){
//on vérifie que le champ mail est correctement rempli (empty permet à la fois de savoir si isset() et s'il est pas vide, pratique)
if(empty($_POST['mail'])) {
echo "<p>Le champ mail est vide.</p>";
//on vérifie que l'adresse est correcte
//en savoir plus sur la regex utilisée : https://www.c2script.com/scripts/verifier-une-adresse-mail-en-php-s2.html
}elseif(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,}$#i", $_POST['mail'])){
echo "<p>L'adresse mail entrée est incorrecte.</p>";
//on vérifie que le champ sujet est correctement rempli
}elseif(empty($_POST['sujet'])){
echo "<p>Le champ sujet est vide.</p>";
//on vérifie que le champ message n'est pas vide
}elseif(empty($_POST['message'])){
echo "<p>Le champ message est vide.</p>";
//tout est correctement renseigné, on envoi le mail
}else{
//mail de l'utilisateur (sécurisée précédemment via regex)
$mail_de_lutilisateur = $_POST['mail'];
//on renseigne les entêtes de la fonction mail de PHP
// Attention à ne pas mettre de caractère spéciaux à "nom de votre site" qui pourraient poser problème
$entetes_du_mail = [];
$entetes_du_mail[] = 'MIME-Version: 1.0';
$entetes_du_mail[] = 'Content-type: text/html; charset=UTF-8';
$entetes_du_mail[] = 'From: Nom de votre site <' . $mail_de_lutilisateur . '>';
$entetes_du_mail[] = 'Reply-To: Nom de votre site <' . $mail_de_lutilisateur . '>';
//ajoute des sauts de ligne entre chaque headers
$entetes_du_mail = implode("\r\n", $entetes_du_mail);
//base64_encode() est fait pour permettre aux informations binaires d'être manipulées par les systèmes qui ne gèrent pas correctement les 8 bits (=?UTF-8?B? est une norme afin de transmettre correctement les caractères de la chaine)
$sujet = '=?UTF-8?B?' . base64_encode($_POST['sujet']) . '?=';
//htmlentities() converti tous les accents et < > en entités HTML pour éviter une faille XSS, ENT_QUOTES convertit en plus les guillemets doubles et les guillemets simples, en entités HTML
$message = htmlentities($_POST['message'], ENT_QUOTES, 'UTF-8');
//ajoute des sauts de ligne HTML si l'utilisateur en a utilisé
$message = nl2br($message);
//en fin, on envoi le mail
if(mail($votre_adresse_mail, $sujet, $message, $entetes_du_mail)){
echo "<p>Le mail à été envoyé avec succès !</p>";
}else{
echo "<p>Une erreur est survenue, le mail n'a pas été envoyé.</p>";
}
}
}
<form action="contact.php" method="post">
Mail : <input type="text" name="mail">
<br>
Sujet : <input type="text" name="sujet">
<br>
Message : <textarea name="message" cols="40" rows="20"></textarea>
<br>
<input type="submit" name="envoyer" value="Envoyer">
</form>
J'espère que ce script gratuit vous est utile.Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.
Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.
Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :
Demander un devisturkish78 le 07 Janvier 2016 à 19:06
Génial!!! tout fonctionne parfaitement!!!
Merci beaucoup!!
abdou le 10 Juin 2017 à 17:43
salut!! merci pour le tuto
santini le 17 Janvier 2019 à 21:14
Super script ! merci beaucoup, mais j'ai une question svp
Après avoir valider l'envoi du formulaire comment faire pour que l'utilisateur soit directement diriger sur une page de type "merci.html"
Cordialement
admin le 18 Janvier 2019 à 18:43
Bonjour, merci beaucoup!
Pour rediriger le membre il vous faut faire le traitement du formulaire avant n'importe quel code HTML, sinon vous allez avoir une erreur, ensuite, si tout est correct, rediriger le membre avecheader("Location: ./merci.html");
santini le 18 Janvier 2019 à 19:13
Bonjour,
Merci, mais je ne suis pas doué ou est ce que je doit placer ce code dans le formulaire ?
Merci
admin le 21 Janvier 2019 à 10:07
Avant n'importe quel code HTML, sinon vous allez avoir une erreur. IL vous faut le mettre quand le traitement est OK, cela reste logique.
arnaudvh62 le 16 Juillet 2019 à 15:23
Je viens de tomber sur ton script et je trouve tes explications très pédagogique. Je le testerai prochainement p.
Personnellement, j'en ai fais un récemment, il semblait fonctionner sauf que dès qu'il y a + 1 ligne et caractères sp"ciaux ou accentués, le message arrive mais vide!
C'est complexe d'ajouter ce type de Capcha?
Merci
admin le 16 Juillet 2019 à 15:34
Merci
Concernant le captcha, j'ai pas compris.
mounk le 15 Octobre 2019 à 20:10
Merci beaucoup pour le script.
Cépendant, moi j'ai un souci, je l'ai essayé mais je ne reçois pas de mail.
1- j'aimerai savoir au niveau de la variable $VotreAdresseMail, faudrait-il que je mette mon adresse qui est censée receptionner les mails?
2- Au niveau des $Entetes .= "From: Nom de votre site <", dois-je remplacé cela par l'adresse complète de mon site ou quoi?
voici mon site: centremultimedia-emk.ml
admin le 16 Octobre 2019 à 09:50
Bonjour,
il vous faut évidement mettre votre adresse email pour recevoir les mails.
Concernant le "From" c'est expliqué en commentaire:
$Entetes .= "From: Nom de votre site <".$_POST['mail'].">\r\n";//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire
komiko le 25 Mai 2021 à 14:40
ras
adipka le 04 Septembre 2021 à 12:50
Bonjour, j'avais posé un problème pour intégrer la page mot de passe oublié, jais créer la page mot de passe oublié avec le script que j'ai reçu, Après avoir renseigné le mail de récupération, la page affiche : Si votre mail est inscrit, vous allez recevoir un mail contenant un lien à cliquer afin de recevoir un nouveau mot de passe. Aider moi a intégrer l'entête de la fonction mail si neccessaire
admin le 04 Septembre 2021 à 12:56
à la place de
mail(bla bla bla)
du tuto de récupération de mail, mettez:
//tout est correctement renseigné, on envoi le mail
//on renseigne les entêtes de la fonction mail de PHP
$Entetes = "MIME-Version: 1.0\r\n";
$Entetes .= "Content-type: text/html; charset=UTF-8\r\n";
$Entetes .= "From: Nom de votre site <".$_POST['mail'].">\r\n";//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire
$Entetes .= "Reply-To: Nom de votre site <".$_POST['mail'].">\r\n";
//on prépare les champs:
$Mail=$_POST['mail'];
$Sujet='=?UTF-8?B?'.base64_encode($_POST['sujet']).'?=';//Cet encodage (base64_encode) est fait pour permettre aux informations binaires d'être manipulées par les systèmes qui ne gèrent pas correctement les 8 bits (=?UTF-8?B? est une norme afin de transmettre correctement les caractères de la chaine)
$Message=htmlentities($_POST['message'],ENT_QUOTES,"UTF-8");//htmlentities() converti tous les accents en entités HTML, ENT_QUOTES Convertit en + les guillemets doubles et les guillemets simples, en entités HTML
//en fin, on envoi le mail
if(mail($VotreAdresseMail,$Sujet,nl2br($Message),$Entetes)){//la fonction nl2br permet de conserver les sauts de ligne et la fonction base64_encode de conserver les accents dans le titre
echo "Le mail à été envoyé avec succès!";
} else {
echo "Une erreur est survenue, le mail n'a pas été envoyé";
}
adikpa le 05 Septembre 2021 à 18:19
Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\mailenvoie.php\index.php on line 62
Une erreur est survenue, le mail n'a pas été envoyé
Veuillez m'aider
admin le 05 Septembre 2021 à 19:40
recherchez l'erreur sur internet, tapez: "Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()"
Vous pouvez voir ce tuto aussi: Envoyer un mail avec wampserver
Clement le 16 Juillet 2022 à 13:20
Merci c'est super ! C'est exactement ce que je cherchais ! j'ai récupèrer un template HTML avec un formulaire et je ne savais pas comment le modifier donc j'ai tout remplacer par ton script et ça fonctionne nickel. Encore merci.
christian30 le 13 Novembre 2022 à 08:34
tres bons conseils. Une aide appréciée. merci
admin le 13 Novembre 2022 à 12:49
Bonjour, quel problème rencontrez-vous ?
Bache le 12 Août 2023 à 09:20
Bonjour
Parfait !!!
Fonctionne parfaitement même avec
php 8.i
Je voudrais rajouté un (nom) qui s'affiche à côté de l'email de l'expéditeur, dans le script php
(Nom,mail,sujet,message ? )
Cordialement
admin le 12 Août 2023 à 10:02
Bonjour,
merci beaucoup !! rajouter le nom est assez complexe en terme de sécurité car l'utilisateur peut entrer ce qu'il veut et poser souci sur les paramètres du mail, je le recommande pas, sauf si vous utilisez une librairie comme PHPmailer qui sécurise ses variables.
Je reste à dispo si besoin, excellent week-end !
Steve
admin le 12 Août 2023 à 10:04
Vous pouvez cependant créer un sélecteur de sujet pré remplis avec une liste HTML via la balise <select>, comme "service client", "erreur technique",... puis de vérifier si le sujet sélectionné existe puis de l'ajouter dans le titre du mail.
Bache le 12 Août 2023 à 10:34
Merci de votre réponse réactive !!!
J'ai (mis votre nom et message )dans
l'onglet message en attendant une solution
killer le 20 Septembre 2023 à 22:06
Salut, merci pour le partage de tous tes codes, ça m'aide beaucoup, mais celui ci ne fonctionne pas. quand je rempli le formulaire (comme un utilisateur le ferai) j'ai le message d'erreur "l'adresse mail entrée est incorrecte. j'ai tenté quelque petites modif et j'ai réussi a passer cette erreur pour arriver sur l'erreur "Une erreur est survenue, le mail n'a pas été envoyé". tu aurai pas un code qui permettrais de savoir pourquoi? stp
admin le 20 Septembre 2023 à 22:09
Quelle est l'adresse mail qui ne passe pas la vérification ? As-tu vérifié si t’avait pas d'espace avant ou après le mail ? (peut arriver quand on fait un copié/collé d'une adresse)
killer le 20 Septembre 2023 à 23:16
Alors, j'ai également fait un test sur un autre serveur histoire d'être sur. Donc pour être sur qu'on se comprenne, je t'explique: sur mon site 1 est hébergé chez free, mon code d'envoi d'email fonctionne parfaitement... Cependant je suis en train de créer un nouveau site hébergé chez 000webhost, et je voulais juste intégrer ton code car il est mieux que le mien ^^ mais il ne fonctionne pas. pour être sur de moi, j'ai d'abord tester ton code sur mon nouveau site (sur 000webhost) évidemment j'ai eu les erreur précédemment cité. j'ai ensuite testé sur mon site (chez free) mais pareil. donc ce n'est pas un problème de messagerie, peut-être une erreur dans les lignes je sais pas, mais a part l'adresse mail y'a rien besoin de changer en soit. Et autre test, j'ai pris mon code de mon site 1 chez free qui fonctionne parfaitment, je l'ai mis sur mon site 000webhost, mais il ne marche pas non plus. il faut savoir que chez webhost, les service de messagerie ne sont pas inclut dans les offre gratuites, par conséquent ils demande de passer par un service de messagerie (Mikadu)... peut-être que c'est ça qui fait merder le bordel. je sais pas. je débute en php alors... j'sais pas quoi faire pour le coup.
admin le 20 Septembre 2023 à 23:19
Tu ma pas répondu à ma question.
Et non le fait que webhost na pas de service de messagerie n’empêche pas de valider le mail en PHP :)
killer le 20 Septembre 2023 à 23:39
Erf, c'est bon trouvé. juste moi qui suis c.. ^^ j'avais repris le tableau d'un vieux code, mais j'avais pas vu que le "action" était resté sur un fichier "envoi.php" en remplacant par "contact.php" ça fonctionne. merci quand même d'avoir répondu. et encore merci pour le partage ;)
admin le 20 Septembre 2023 à 23:42
OK Parfait !
Si tu veux avoir plus de détails sur la validation du mail, clique-ici
killer le 21 Septembre 2023 à 01:55
Oh super sympa ça merci, je me le met de côté pour plus tard :)
Kiki le 05 Décembre 2023 à 17:47
Salut,
Comment serait il possible que les messages (erreur ou mail envoyé par exemple) apparaissent sous le bouton envoyer plutôt que sur une autre page?
admin le 05 Décembre 2023 à 18:04
Bonjour, vous pouvez mettre les messages dans une variable puis les afficher à l'endroit où vous voulez dans la page.
$message = "Une erreur est survenue (exemple de message, peut être autre chose)";
//plus loin dans la page :
echo $message;
Bache le 16 Février 2024 à 17:24
je vous est envoyé le " Bache le 12 Août 2023 à 09:20"
que votre script Fonctionne parfaitement même avec
php 8.1 !!!
jusqu'à ce jour le 16/02/2024 ? il ne fonctionne plus.....
Que se passe-t-il ?
Pouvez-vous m'aider.
Cordialement
admin le 16 Février 2024 à 18:39
Si il fonctionnait et que la version PHP n'a pas changée, il doit y avoir un souci autre part.
merinos le 23 Novembre 2024 à 19:06
merci pour le code.
toutefois, une chose étrange, le texte du message est désespérément vide à l'arrivée.
une idée?
admin le 23 Novembre 2024 à 19:27
Bonjour, merci beaucoup.
Plusieurs facteurs peuvent être à l'origine de votre problème :
- Votre hébergeur qui pourrait mal envoyer vos emails
- Le code PHP mal utilisé (voir s'il ya pas des messages d'erreurs de ci et là, faire un débugage)
- Votre webmail qui affiche pas bien vos messages reçus
- L'adresse mail de réception qui n'est pas autorisée à recevoir des emails
- L'encodage de l'email, ce script étant basique pour faire un envoi, je vous conseil de passer par une solution efficace comme PHPMailer qui s'occupera d'envoyer vos emails correctement encodés et couplé avec Brevo qui signera vos emails pour que vous soyez sûr qu'ils arrivent à bon port. Je ferais un article bientôt pour expliquer comme les utiliser.
admin le 24 Novembre 2024 à 00:11
Le From peut causer une erreur, en effet, comme mentionné dans mon code ci-dessus : "Attention à ne pas mettre de caractère spéciaux à "nom de votre site" qui pourraient poser problème"
merinos le 24 Novembre 2024 à 11:25
merci.
tout le reste étant bien OK, je viens de trouver une solution (un Webmail... ?...) :p ... je viens de trouver une solution:
<td>
<textarea name="message" cols="60" rows="10">
</textarea>
</td>
--> avec un retour à la ligne et un espace en début de ligne entre les deux balises textarea.
merinos le 24 Novembre 2024 à 11:34
pardon, l'affichage n'étant pas optimal... et je radote un peu (c'est émotionnel... ayant passé pas mal de temps dessus).
admin le 24 Novembre 2024 à 13:28
J'ai peut être pas compris où le message est vide ? Lors de la réception dans votre webmail, ou sur votre site, dans le textarea ?
J'ai créé un nouveau tuto pour apprendre à utiliser PHPMailer et Brevo, cela pourra vous aider.
merinos le 24 Novembre 2024 à 13:40
@ admin
en fait, j’utilise un client e-mail (Thunderbird) et le code source du courriel reçu me confirme la non-transmission du texte... par contre, une fois l'astuce précitée en fonction, cela passe.
admin le 24 Novembre 2024 à 13:41
Vous avez sans doute un problème avec votre code HTML, à mon avis.
merinos le 24 Novembre 2024 à 13:56
bien reçu et un grand merci pour l'aide.
merinos le 27 Novembre 2024 à 10:11
@ admin
zut... ma solution, ci-dessus, est foireuse (et mes excuses à ce sujet).
cette fois, je pense avoir trouvé... entre le script PHP et la page HTML, la déclaration des caractères doit être identique... alors, j'ai modifié le script et cela fonctionne.
pour les non-initiés, voici ce qui doit se trouver dans l’entête de la page de votre formulaire de contact (--> réponse courte): https://www.w3.org/International/questions/qa-html-encoding-declarations.fr.html avec le script non retouché.
Daniel Zobrist le 22 Mai 2025 à 13:37
Bonjour
Merci pour votre script, j'aurais cependant une question.
Et est-il possible d'ajouter un champ pour le numéro de téléphone?.
Merci pour le retour
Bonne journée
admin le 22 Mai 2025 à 17:29
Bien sûr, ajouter un input HTML puis le traiter en PHP, il vous faudra un input de type text.
admin le 22 Mai 2025 à 17:33
Un input de type tel fonctionne aussi, si le navigateur client le prend pas en charge il affichera par defaut un input de type text.
https://developer.mozilla.org/fr/docs/Web/HTML/Reference/Elements/input/tel