PHP - MySQL [Retour au menu]
Vérification d'un E-Mail

Comment faire pour s'assurer que l'E-Mail précisé est valide, ET qu'il s'agit bien de l'E-Mail de la personne qui le fournit ?

Imaginons que des gens désirent s'inscrire à une liste de diffussion, tout simplement : c'est à dire que'n arrivant sur une page, pour être inscrits dans une base de données MySQL, ils doivent inscrire leur nom, prénom et E-Mail. Il n'est bien entendu à peu près pas possible de dire s'il s'agit bien d'un réel "Marcel Dupont" par exemple, mais il est possible de simplement vérifier si l'E-Mail qu'il a indiqué est bien valide, et s'il le relève bien correctement.
Pour ce faire, une fois qu'il a entré les données principales (Nom, Prénom, E-M
ail), PHP lui envoie un E-Mail automatiquement, qui contient un lien hypertexte sur lequel il va devoir cliquer pour que ses données soient réellement entrées dans la base de données.
Bien entendu, rien ne prouve qu'il ne fournit pas une adresse E-Mail qu'il vient de se créer dans les minutes qui précèdent, et qui va lui servir uniquement à valider son inscription, mais qu'il va détruire tout de suite après... Mais c'est le lot de tous les webmasters du monde.

Eléments nécessaires

Etape par étape

  1. L'utilisateur entre dans un formulaire inscription.htm ses nom, prénom et E-Mail
  2. Il clique sur "OK"
  3. En cliquant sur OK, ça envoie dans une page envoimail.php qui va immédiatement envoyer un E-Mail à l'adresse indiquée, en informant le nouvel arrivant qu'il doit relever son E-Mail
  4. Dans l'E-Mail reçu, il doit cliquer sur un lien confirmation.php avec comme paramètre ses propres données
  5. confirmation.php lui indique qu'il est maintenant bel et bien inscrit

Schéma

Le formulaire d'inscription inscription.htm

Il s'agit d'un formulaire classique avec les champs d'entrée Nom, Prénom et E-Mail :

<body>
  <form method="post" action="envoimail.php">
    Votre nom    : <input type="text"   name="Nom">    <br>
    Votre prénom : <input type="text"   name="Prenom"> <br>
    Votre E-Mail : <input type="text"   name="EMail">  <br>
    <input                type="submit" name="Submit" value="Envoyer les données">
  </form>
</body>

La page d'envoi d'E-Mail

Dans envoimail.php, nous allons envoyer directement un E-Mail à l'adresse spécifiée, qui contient le texte suivant :

Bonjour,
Pour valider votre inscription dans la base de données, veuillez cliquer sur ce lien s'il vous plait

(Ne cliquez pas dessus, c'est un exemple invalide)

Le lien pointera vers http://www.info-3000.com/phpmysql/verificationemail/confirmation.php, avec comme paramètres le nom, le prénom et l'E-Mail, comme ceci :

http://www.info-3000.com/phpmysql/verificationemail/confirmation.php?Nom=Dupont&Prenom=Marcel&EMail=truc@machin.com

il va donc falloir envoyer un E-Mail pourvu d'un lien hypertexte qui va contenir l'adresse de la page de confirmation confirmation.php, avec les balises correspondantes, comme ceci :

Bonjour,<br>
Pour valider votre inscription dans la base de données,
<a href=
"http://www.info-3000.com/phpmysql/verificationemail/confirmation.php?Nom=Dupont&Prenom=Marcel&EMail=truc@machin.com">veuillez
cliquer sur ce lien
</a>
s'il vous plait

Le nom, prénom et E-Mail qui se trouvent en paramètre vont simplement servir à accéder correctement à confirmation.php, c'est à dire avec déjà en mémoire le nom, le prénom et l'E-Mail, pour immédiatement les inscrire dans la base de données, sans avoir à les resaisir une 2ème fois.

Bien entendu, le nom, le prénom et l'E-Mail ne sont pas fixes, mais proviennent du formulaire inscription.htm d'où nous venons, ce qui donne :

Bonjour,<br>
Pour valider votre inscription dans la base de données,
<a href='http://www.info-3000.com/phpmysql/verificationemail/confirmation.php?Nom=$Nom&Prenom=$Prenom&EMail=$Email'>veuillez
cliquer sur ce lien
</a> s'il vous plait

Il serait élégant de stocker ce texte dans une variable que nous injecterons ensuite dans la fonction mail(), comme ceci :

$Corps = "Bonjour,";
$Corps .= "<BR>";
$Corps .= "Pour valider votre inscription dans la base de données, ";
$Corps .= "<a href='http://www.info-3000.com/phpmysql/verificationemail/confirmation.php?Nom=";
$Corps .= $Nom;
$Corps .= "&Prenom=";
$Corps .= $Prenom;
$Corps .= "&EMail=";
$Corps .= $EMail;
$Corps .= "'> veuillez cliquer sur ce lien";
$Corps .= "</a> s'il vous plait";

Ce qui nous permettra d'envoyer le mail comme ceci en pensant bien à lui spécifier l'envoi en Content-type: text/html:

mail("mdefawes@info-3000.com","Confirmation d'inscription" , $Corps , "Content-type: text/html");

Et voià ! Il y a juste a informer le nouveau venu qu'il doit maintenant relever ses mails ! Voici finalement le code complet de la page envoimail.php:

<body>
  <?
    $Corps = "Bonjour,";
    $Corps .= "<BR>";
    $Corps .= "Pour valider votre inscription dans la base de données, ";
    $Corps .= "<a href='http://www.info-3000.com/phpmysql/verificationemail/confirmation.php?Nom=";
    $Corps .= $Nom;
    $Corps .= "&Prenom=";
    $Corps .= $Prenom;
    $Corps .= "&EMail=";
    $Corps .= $EMail;
    $Corps .= "'> veuillez cliquer sur ce lien";
    $Corps .= "</a> s'il vous plait";
    mail("mdefawes@info-3000.com","Confirmation d'inscription" , $Corps , "Content-type: text/html");
  ?>
  Merci de votre inscription. Pour la valider, relevez vos E-Mails : un nouveau message vient de vous être envoyé avec les instructions nécessaires.
</body>

Une fois que le nouveau venu a relevé son message et qu'il a cliqué sur le lien, il se retrouve donc dans la page confirmation.php :

Conception de confirmation.php

L'arrivée dans confirmation.php est forcément accompagnée des paramètres Nom, Prenom et EMail.

Le code PHP est alors très simple :

<?
  mysql_connect("localhost", "info3000", "MonMotDePasse");
  mysql_select_db("info3000");
  mysql_query("INSERT INTO ZZ_CarnetAdresse VALUES($Nom,$Prenom,$EMail);");
  mysql_close();
?>

---