Inscription contrôlée à une NewsLetter ou Service (1/3)
Abonnement avec confirmation et désabonnement
Les procédures d'abonnement à une lettre d'information (newsletter) sont souvent demandées sur le forum. La question la plus fréquente étant « Comment savoir si l'adresse électronique est bonne ? »...
Le principe étudié ici peut également être adapté pour des abonnements/inscriptions à des services comme j'ai été amené à le développer pour l'inscription à un système de réservation en ligne à une salle de formation aux langues étrangères.
Voyons donc, pas à pas, comment faire pour être sûr d'enregistrer une adresse électronique valide et comment proposer à nos inscrits une option pour se désabonner.
Le problème à résoudre est multiple :
- proposer un formulaire d'abonnement à nos visiteurs ;
- vérifier que l'adresse électronique saisie par l'abonné est valide ;
- proposer un lien de désabonnement pour ceux qui en ont assez de nous lire ;).
Il est clair que tout cela va nous obliger à créer une base de données pour y stocker les adresses électroniques de nos abonnés et éventuellement d'autres informations. Nous nous limiterons, dans notre exemple, au nom, au prénom et à l'adresse électronique.
Le formulaire d'abonnement
En ASP (demande_inscription.asp)
<% ' Envoi de mail avec confirmation - Denis Blomme - DB77 if request.form("ok")="Valider" then ' Envoi du mail de confirmation au futur abonné ' on prépare le corps du message corps="<HTML><BODY><FONT FACE='Arial, Verdana' SIZE=2>" corps=corps & "Pour activer votre inscription, cliquez sur ce lien : <a href=" corps=corps & chr(34) & "http://site/inscription.asp?nom=" & UCase(request.form("nom")) corps=corps & "&prenom=" & request.form("prenom") corps=corps & "&mail=" & request.form("mail") corps=corps & "&abo=1" & chr(34)&">confirmation</a>" corps=corps+"</BODY></HTML>" ' On paramètre les autres infos avant envoi Set Mail = Server.CreateObject("Persits.MailSender") Mail.Host = "smtp.a.moi" Mail.From = "mon.mel@a.moi" Mail.FromName = "Mon Nom" Mail.Subject = "Demande d'inscription" Mail.Body = corps Mail.IsHTML = True 'si True Mail.AddAddress request.form("mail") Mail.Send Set Mail=nothing %><script language="Javascript"> alert("Vous allez recevoir un mail de confirmation.");self.close(); </script><% end if %> <html> <head> <title>Mon site</title> <link rel="stylesheet" href="../inc/style.css" type="text/css"> <script language="Javascript"> function valider() { mes=""; if (document.frm.nom.value==""){mes=mes+"\n- votre nom");} if (document.frm.prenom.value==""){mes=mes+"\n- votre prénom");} if (document.frm.mail.value==""){mes=mes+"\n- votre mél");} // si tout Ok alors on envoie if(mes!=""){alert("Veuillez renseigner :"+mes);return false;} if(mes==""){return true;} } </script> </head> <body bgcolor="white" text="#336699" link="#336699" alink="Black" vlink="#336699"> <form name="frm" action="demande_inscription.asp" method="post" onSubmit="return valider()"> <table width="400" border=0 cellpadding=2 cellspacing=0> <tr align="left" class=grise><td valign="center" background="images/400-haut.gif"> <font face="Verdana, Arial, Sans-serif" size="1" color="#FFFFFF"> <b> Demande d'inscription</b></font> </td></tr> <tr> <td align="left" class=bleue ><p align="left"><font face="Verdana, Arial, Sans-serif" size="1"> <table width="390"><tr> <td align=right valign=top><font face="Arial, Verdana, sans-serif" size="1">Votre nom : </font></td> <td align=left valign=top><input type="text" name="nom" size="30"></td> </tr><tr> <td align=right valign=top><font face="Arial, Verdana, sans-serif" size="1">Votre prénom : </font></td> <td align=left valign=top><input type="text" name="prenom" size="30"></td> </tr><tr> <td align=right valign=top> <font face="Arial, Verdana, sans-serif" size="1">Votre adresse électronique : </font></td> <td align=left valign=top><input type="text" name="mail" size="30"></td> </tr><tr> <td align="center" colspan=2><input type="submit" name="ok" value="Valider"></td> </tr></table> </td></tr></table> </form> </body> </html>
Et en PHP (demande_inscription.php)
<? if(@$_POST["ok"]=="Valider"){ // Envoi du mail de confirmation au futur abonné // on prépare le corps du message $corps="<HTML><BODY><FONT FACE='Arial, Verdana' SIZE=2>"; $corps.="Pour activer votre inscription, cliquez sur ce lien : <a href="; $corps.=chr(34)."http://site/inscription.php?nom=".strtoupper($_POST["nom"]); $corps.="&prenom=".$_POST["prenom"]; $corps.="&mail=".$_POST["mail"]; $corps.="&abo=1".chr(34).">confirmation</a>"; $corps.="</BODY></HTML>"; // On paramètre les autres infos avant envoi $subject = "Demande d'inscription"; $TO = $_POST["mail"]; $h = "From: mon.mel@a.moi\nContent-Type: text/html; charset=iso-8859-1\n"; mail($TO, $subject, $corps, $h); ?><script language="Javascript"> alert("Vous allez recevoir un mail de confirmation.");self.close(); </script><? } ?> <html> <head> <title>Mon site</title> <link rel="stylesheet" href="../inc/style.css" type="text/css"> <script language="Javascript"> function valider() { mes=""; if (document.frm.nom.value==""){mes=mes+"\n- votre nom");} if (document.frm.prenom.value==""){mes=mes+"\n- votre prénom");} if (document.frm.mail.value==""){mes=mes+"\n- votre mél");} // si tout Ok alors on envoie if(mes!=""){alert("Veuillez renseigner :"+mes);return false;} if(mes==""){return true;} } </script> </head> <body bgcolor="white" text="#336699" link="#336699" alink="Black" vlink="#336699"> <form name="frm" action="demande_inscription.php" method="post" onSubmit="return valider()"> <table width="400" border=0 cellpadding=2 cellspacing=0> <tr align="left" class=grise><td valign="center" background="images/400-haut.gif"> <font face="Verdana, Arial, Sans-serif" size="1" color="#FFFFFF"> <b> Demande d'inscription</b></font> </td></tr> <tr> <td align="left" class=bleue ><p align="left"><font face="Verdana, Arial, Sans-serif" size="1"> <table width="390"><tr> <td align=right valign=top><font face="Arial, Verdana, sans-serif" size="1">Votre nom : </font></td> <td align=left valign=top><input type="text" name="nom" size="30"></td> </tr><tr> <td align=right valign=top><font face="Arial, Verdana, sans-serif" size="1">Votre prénom : </font></td> <td align=left valign=top><input type="text" name="prenom" size="30"></td> </tr><tr> <td align=right valign=top> <font face="Arial, Verdana, sans-serif" size="1">Votre adresse électronique : </font></td> <td align=left valign=top><input type="text" name="mail" size="30"></td> </tr><tr> <td align="center" colspan=2><input type="submit" name="ok" value="Valider"></td> </tr></table> </td></tr></table> </form> </body> </html>