Envoi du contenu d'un formulaire vers un email

La rubrique Contact est  la page incontournable des sites de présentation. Voici quelques solutions pour recevoir des messages.

Le "mailto"

La formule la plus simple consiste à publier l'email du responsable à contacter. En HTML, on crée un lien vers ce mail avec le protocole mailto, comme montré ci-dessous :

<a href="mailto:jules@free.fr">Ecrivez-moi</a>

Avec l'usage répandu des webmails, la plupart des internautes ne paramètrent plus leurs clients mails comme Outlook ou Thunderbird, ou pire, certains utilisateurs ne savent pas copier l'email de la rubrique contact dans leur webmail. Il est évident que cela pose problème si le propriétaire du site veut être facilement contacté par tout le monde.

Le formulaire de contact

Une solution efficace est l'usage d'un formulaire suivi de la fonction PHP mail(). Autre avantage, votre email n'étant pas directement publié, c'est un atout contre le spam. Voici un exemple simple pour l’utiliser :

contact.html

<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>Envoi d'un email par formulaire</title>
</head>
<body>
	<form method="post" action="mail.php">
		<label>Tape ton message ici pour m'écrire</label>
		<textarea rows="10" cols="30" name="message"></textarea>
		<input type="submit">
	</form>
</body>
</html>

Dans ce formulaire, la balise <textarea> permet de saisir plusieurs lignes de texte, là où la traditionnelle balise <input type='text'> n'autorise qu'une seule ligne de saisie.

mail.php

<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Envoi d'un email par formulaire</title>
	</head>
	<body>
		<p>
		<?php
		$retour=mail('jules@free.fr','Envoi depuis le site Free', $_POST['message'], 'From : webmaster@free.fr');
		if($retour)
			echo 'Votre message a bien été envoyé !';
		?>
		</p>
	</body>
</html>

Dans cette exemple tout simple, le contenu du formulaire sera expédié vers l'email jules@free.fr grâce à la fonction mail().

Syntaxe de la fonction mail() :

mail(chaîne email_destinataire, chaîne Sujet, chaîne corps_du_message, chaîne options);

On retrouvera dans chaîne options, le mot From: suivi de l'email de l'expéditeur. Ce qui est amusant, c'est qu'on peut inventer n'importe quel email et le destinataire n'y verra que du feu... Quiproquos en vue !

Page contact "tout en un"

Le code ci-dessous fusionne les deux pages précédentes grâce à la fonction isset(). Il ajoute également la collecte de l'email de l'internaute pour s'en servir comme adresse d'expédition puis adresse de réponse. Les attributs required affectés aux champs de texte forceront l'internaute à renseigner ces champs sur les navigateurs récents. Si le navigateur ne gère pas l'attribut required, le code PHP vérifiera la présence de l'arobase avec la fonction strpos().

contact.php

<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Contact</title>
	</head>
	<body>
		<h1>Contact</h1>
			<form method="post">
			<label>Email</label>
			<input type="email" name="email" required><br>
			<label>Message</label>
			<textarea name="message" required></textarea><br>
			<input type="submit">
		</form>
		<?php
		if(isset($_POST['message'])){
			$position_arobase=strpos($_POST['email'],'@');
			if($position_arobase===false)
				echo '<p>Votre email doit comporter un arobase.</p>';
			else {
				$retour=mail('jules@free.fr','Envoi depuis page Contact', $_POST['message'], 'From : '.$_POST['email']);
				if($retour)
					echo '<p>Votre message a été envoyé.</p>';
				else
					echo '<p>Erreur.</p>';
			}
		}
		?>
	</body>
</html>

Articles connexes