Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
La fonction
mail se décrit ainsi :
Code : PHP1
2
3 | <?php
mail($destinataire,$objet,$message,$from,$parametre);
?>
|
$from et
$parametre sont facultatifs : mais pour notre tuto, on utilisera tout de même
$from qui sert à envoyer des en-têtes supplémentaires (
From,
Cc et
Bcc). Vous allez vite comprendre son utilité.
Un petit exemple pratique de cette :
Code : PHP1
2
3
4
5
6
7 | <?php
$destinataire="maurice@tdingue.fr";
$objet="Ceci est un exemple";
$message="Comment vas tu ?\nJe voulais te demander\nBlaBla";
$from="From: cmoi@ccool.fr\r\n";
mail($destinataire,$objet,$message,$from);
?>
|
Bien sûr, on n'enverra pas de mail de cette façon : c'est bien trop moche (mais ça marche quand même

).
On va pour ça faire un formulaire tout joli et agréable à manipuler.
On va créer notre menu
CONTACT un peu comme sur mon site :
Sauf que pour aller au plus simple, on ne mettra que "
Votre E-mail" et "
Votre message" : ça suffit amplement ; le reste, c'est pour la frime.
Allez ! Passons au concret.
On va, pour l'exemple de notre formulaire, appeler notre fichier :
contact.htm.
Il sera à la racine de votre site :
http://www.monsite.fr/contact.htm.
Rien ne vous empêche de le mettre ailleurs, dans un sous-tiroir par exemple ; l'important est de préciser dans la balise <form> où sera placé le script invoqué en php, grâce à l'attribut action="monscript.php"...
Code : HTML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | <html>
<head>
<title>Contactez-moi</title>
</head>
<body>
<!-- On ouvre la balise form, et on met en place notre formulaire. On invoquera la soumission de ce formulaire dans la page "mail.php", qui sera elle aussi à la racine de notre site : <lien url="http://www.monsite.fr/mail.php">http://www.monsite.fr/mail.php</lien> -->
<form method="post" action="mail.php">
<h2>CONTACT</h2>
<p>
Votre Email <br />
<input type="text" name="votremail" />
<!-- Valeur par défaut de l'objet du mail -->
<input type="hidden" name="objet" value="Vous avez un nouveau message" />
</p>
<p>
Votre message <br />
<textarea cols="66" rows="6" name="message"></textarea>
</p>
<p>
<input type="submit" value="Envoyer" />
</p>
</form>
<!-- On ferme la balise form, notre formulaire est fini -->
</body>
<html>
|
Voilà : notre formulaire est fini... On va passer maintenant à la partie php...
Ha oui... vous avez sûrement remarqué :
Code : HTML1 | <input type="hidden" name="objet" value="Vous avez un nouveau message" />
|
Cela nous servira pour mettre automatiquement comme
objet (à chaque e-mail reçu) la valeur par défaut : "
Vous avez un nouveau message".
Bien sûr, cette information n'a pas lieu d'être dans notre formulaire : c'est pourquoi on la cache avec le
type="hidden".
Pour la partie php, je vous rappelle que le fichier se nommera "mail.php" ; on pourrait simplement faire :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | <?php
$destinataire="monEmail@chezmoi.fr";
$objet=$_POST['objet'];
$message=$_POST['message'];
$from="From: ".$_POST['votremail']."\r\n";
if(mail($destinataire,$objet,$message,$from))
{
echo "Message envoyé au webmaster";
}
else
{
echo "Une erreur s'est produite";
}
?>
|
Mais
pas bien ! On va devoir passer par une petite REGEX pour voir si la sémantique de celui-ci est viable, du style :
Code : PHP1
2
3 | <?php
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
?>
|
Ensuite, on va protéger nos variables avec la fonction
htmlspecialchars(), et enlever les antislashs qui peuvent se mettre devant les apostrophes, pour une meilleure lisibilité avec la fonction
stripslashes().
Code : PHP1
2
3
4 | <?php
$from=htmlspecialchars("From: ".$_POST["votremail"]."\r\n"));
$message=stripslashes(htmlspecialchars($_POST["message"]));
?>
|
Maintenant, on est parés pour faire le code final avec quelques conditions.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | <?php
// La variable $verif va nous permettre d'analyser si la sémantique de l'e-mail est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
// On assigne et protége nos variables
$votremail=$_POST["votremail"];
$from=htmlspecialchars("From: ".$votremail."\r\n");
$message=stripslashes(htmlspecialchars($_POST["message"]));
// On met ici notre e-mail
$destinataire="monemail@chezmoi.fr";
/* On place le sujet du message qui, ici, sera toujours le même
puisque dans la partie Html, on l'a mis en caché grace au type="hidden"<gras><couleur nom="rouge"> ;) </couleur></gras> avec comme valeur "Vous avez un nouveau message" */
$objet=$_POST['objet'];
// C'est bon : on est ok, vérifions si l'e-mail est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
echo "Votre e-mail n'est pas valide";
}
// On vérifie s'il y a un message
elseif (trim($message)=="")
{
echo "Y'en a marre des messages vides !";
}
// Si tout est ok, on envoie l'e-mail
else
{
mail($destinataire,$objet,$message,$from);
echo "Message envoyé au webmaster";
}
?>
|
Les commentaires de ce script sont assez clairs : pourtant, je me dois d'apporter quelques petites explications pour :
Code : PHP1
2
3
4 | <?php
$votremail=$_POST["votremail"];
$from=htmlspecialchars("From: ".$votremail."\r\n");
?>
|
$votremail sera notre variable pour la cellule "Votre e-mail".
$from, qui est le paramètre d'en-tête du mail reçu, fera figurer l'e-mail de la personne qui vous l'envoie, astuce sympathique pour ensuite simplement cliquer sur répondre (le bouton "Répondre" ou son équivalent) de votre messagerie personnelle. Elle n'est pas belle, la vie ? 
En ce qui concerne \r\n cela indique un saut de ligne dans le header (en-tête) du code source de votre mail, qui vous permettra d'ajouter des en-têtes supplémentaires si par exemple vous voulez être averti des mauvais email sur un de vos emails personnel "Return-Path: cetemailnexistepas@free.fr\r\n"; et encore bien d'autres...
C'est quoi, ce point d'exclamation devant la fonction
!preg_match() ???
Hé hé !

Lorsque l'on met dans une condition
if un point d'exclamation devant une fonction, cela sert tout simplement à lui faire dire le contraire de ce qu'elle doit remplir :
Code : PHP1
2
3 | <?php
if(!preg_match($verif,$votremail))
?>
|
Ce qui veut dire textuellement : si la fonction
preg_match() n'est
pas vérifiée,
{ "alors blabla blabla" }.
En fait, c'est un
opérateur de négation : cela marche de la même manière si on le met devant une variable, ou le signe égal.
Exemple :
Code : PHP1
2
3
4
5
6
7 | <?php
if($verifemail!="")
{
// Si $verifemail n'est pas égal à rien
echo "La cellule n'est pas vide"
}
?>
|
Et la fonction trim(), alors ?
Code : PHP1
2
3 | <?php
elseif (trim($message)=="")
?>
|
Cette fonction nous permet de supprimer les caractères invisibles en début et fin de chaîne, tels que les espaces (merci à Tantan pour cette suggestion, d'ailleurs

).