Envoyer
le contenu d'un formulaire à une adresse donnée par e-mail est une
chose extrêmement simple. La fonction mail() de PHP prend quatre arguments:
le destinataire, le sujet, le message et des headers additionnels. Dans ce tutorial,
vous allez apprendre à valoriser chacun de ces paramètres, à
expédier le mail ainsi constituer et à afficher une page de confirmation.
Nous allons utiliser un processus en deux étapes, une page pour le formulaire
et une autre avec le code PHP qui traitera les données du formulaire et
retournera la réponse.
NOTE:
Nous utilisons l'extension .php, vous devez la modifier en accord avec votre serveur
d'hébergement qui ne reconnait parfois que .php3. Dans certains cas la
fonction mail() est désactivée, elle a été remplacée
par une autre fonction - email() par exemple - mais qui a les mêmes paramètres.
C'est pour mieux contrôler les envois et ainsi éviter le spam.
Formulaire
Nous allons
écrire le formulaire suivant:
<HTML>
<HEAD>
<TITLE>E-Mail Form</TITLE>
</HEAD>
<BODY>
<FORM method="POST" action="do_sendform.php">
<P>Your Name:<br>
<INPUT type="text" name="sender_name" size=30>
</p>
<P>Your E-Mail Address:<br>
<INPUT type="text" name="sender_email" size=30>
</p>
<P>Message:<br>
<textarea name="message" cols=30 rows=5></textarea>
</p><INPUT type="submit" value="Send This Form">
</FORM>
</BODY>
</HTML>
Ce qui
donne le formulaire suivant que l'on retrouve souvent :
Regardons
ce que nous venons d'écrire. Premièrement, l'action du formulaire
est do_sendform.php.
C'est le nom du fichier que nous allons écrire de suite, celui qui contiendra
le code qui traitera les données du formulaire.Par défaut, le nom
d'un élément de formulaire deviendra le nom de la variable passée
à do_sendform.php
, aussi quand
le formulaire sera envoyé, nous allons transmettre trois variables: $sender_name,
$sender_email
et $message.
Dans ce tutorial nous allons nous envoyer le message avec un sujet prédéfini,
aussi le destinataire et le sujet vont être «en dur» dans le
code PHP.
Le script
Si vous
utilisez PHP3 et que vous n'avez pas de contrôle sur votre serveur ou si
vous ne savez si "variable tracking" est on ajoutez cette ligne <?php_track_vars?>
pour être sûr que, pour ce script au moins, "variable tracking"
est on. (Cette option permet de récupérer effectivement les variables
passées par un formulaire, c'est bien souvent le cas).
Maintenant,
nous allons construie le message par concaténation des chaînes pour
former une longue chaîne de message. C'est plutôt de l'assemblage
en utilisant les caractères de nouvelle ligne: "\n" et de tabulation:
"\t". Nous continuons le code PHP de la façon suivante:
<?php
$msg =
"Sender Name:\t$sender_name\n";
Dans
cette ligne, nous commençons le message en créant une variable appelé
$msg et en l'initialisant par le texte "Sender
Name", suivi d'une tabulation, suivi de la valeur de $sender_name
puis du caractère de nouvelle ligne.
Continuons la création de notre message par:
$msg .= "Sender E-Mail:\t$sender_email\n";
$msg .= "Message:\t$message\n\n";
La dernière ligne contient deux caractères de nouvelle ligne pour
ajouter des espaces en blanc à la fin de la chaîne.
A ce stade, nous avons demander à PHP de construire la longue chaîne
suivante:
$msg = "Sender Name:\t$sender_name\nSender
E-Mail:\t$sender_email\nMessage:\t$messsage\n\n";
Cependant,
l'utilisation des opérateurs de concaténation et la séparation
du code par des espaces en blanc le rend plus aisément modifiable ultèrieurement
car vous n'aurez pas à chercher dans une longue chaîne de caractères..
Au début
de ce tutorial, je vous ai dit que la fonction mail prenait quatre arguments.
Nous allons maintenant créer les variables qui vont contenir les valeurs
que vous maîtrisez à savoir le destinataire et le sujet:
$recipient = "you@youremail.com";
$subject = "Web Site Feedback";
Evidemment vous y mettez votre propre e-mail et le sujet que vous voulez.
Ensuite,
créons une variable pour les "headers" additionnels. Les plus
courants sont "From" et "Reply-To". Créons donc la
variable appelée $mailheaders et ajoutons lui
ceci:
$mailheaders = "From: My
Web Site <> \n";
$mailheaders .= "Reply-To: $sender_email\n\n";
L'utilisation de "<>" dans le "From" header indique
une adresse e-mail vide. nous pourrions y placer la variable $sender_email
comme dans le "Reply-To" header, mais si l'utilisateur n'a pas complété
le champ, le formulaire ne pourra pas être traité par le serveur
de mail avec un header "From" vide. Il est donc plus judicieux de mettre
une valeur générique et d'utiliser le champ "Reply-To"
pour y mettre l'adresse de l'expéditeur le cas échéant.
Vosu avez
maintenant tous les composants que la fonction mail() exige pour fonctionner correctement.
Placez cecei dans votre code:
mail($recipient, $subject,
$msg, $mailheaders);
Pour terminer
Vous devez
renvoyer quelque chose sur l'écran de l'utilisateur pour lui signifier
que son message a été envoyé. Sinon, vous savez bien que
certains vont rester et appuyer sur "Send this form" environ un billion
de fois pour finir par remplir votre boîte aux lettres. Ajoutez donc quelques
lignes de HTML en fin de fichier et fermer le code PHP:
echo "<HTML><HEAD>";
echo "<TITLE>Form Sent!</TITLE></HEAD><BODY>";
echo "<H1 align=center>Thank You, $sender_name</H1>";
echo "<P align=center>";
echo "Your feedback has been sent.</P>";
echo "</BODY></HTML>";
?>
L'utilisation de $sender_name
dans le contenu de ce qui est retourné à l'utilisateur, constitue
un semblant de personnalisation.
Le script
complet
Votre script
entier doit ressembler à quelque chose comme ceci:
<?php
$msg = "Sender Name:\t$sender_name\n";
$msg .= "Sender E-Mail:\t$sender_email\n";
$msg .= "Message:\t$message\n\n";
$recipient = "you@youremail.com";
$subject = "Web Site Feedback";
$mailheaders = "From: My Web Site <> \n";
$mailheaders .= "Reply-To: $sender_email\n\n";
mail($recipient, $subject, $msg, $mailheaders);
echo "<HTML><HEAD>";
echo "<TITLE>Form Sent!</TITLE></HEAD><BODY>";
echo "<H1 align=center>Thank You, $sender_name</H1>";
echo "<P align=center>";
echo "Your feedback has been sent.</P>";
echo "</BODY></HTML>";
?>
La conclusion
de l'auteur
Of course,
feel free to substitute label names, spacing and any other items specific to your
environment. As always, to learn more than just the basics, learn the PHP Manual
and read the PHP Mailing List Archives!