Validation d'adresse e-mail en PHP.Date de publication : 13 mai 2006 Date de mise à jour : 13 mai 2006
Par Alexandre TRANCHANT
(CV) Remerciements à Mathieu et Yogui pour leur relecture. Ce tutoriel va vous permettre de vérifier la validité d'une adresse e-mail. Il répond à un besoin constant des webmasters qui souhaitent valider les adresses e-mails des internautes s'inscrivant sur leurs sites. Nous verrons différentes natures de validation, de la plus simple, par analyse syntaxique, à la plus complexe, par vérification du nom de serveur.
Sommaire
De quelle validation d'adresse e-mail a-t-on réellement besoin ?Le but de ce tutoriel est de répondre à cette question. Plusieurs méthodes y sont présentées. Chacune possède des avantages, chacune possède des défauts. Au final, vous serez à même d'effectuer votre choix en ayant un maximum de cartes en main. Validation rapide par expression régulièreLa validation par expression régulière est sans doute la plus rapide, mais la moins précise qu'il est possible d'observer. L'analyse de la syntaxe va déterminer si l'adresse e-mail entrée dans le formulaire est une adresse valide. La méthode consiste donc à vérifier si la valeur correspond bien au masque standard d'une adresse e-mail. Le piège, par contre, réside dans la définition exacte d'une adresse e-mail standard. Cette définition est régie par un ensemble de normes : Remarque : Pour que la fonction mail() de php soit en mesure d'envoyer un e-mail, il est nécessaire que l'adresse entrée respecte la norme RFC2822. Ces définitions sont extrêmement complexes. Et le lecteur, au départ, y découvre que les adresses e-mails suivantes sont parfaitement valides :
Etonnant ? Mais est-ce ce dont le webmaster lamda a réellement besoin ? Il est communément admis qu'un internaute saisissant son adresse e-mail entre une adresse semblable à notre premier exemple : "nom@domaine.extension" . Si notre but est seulement de gérer ce type d'adresse alors une expression régulière relativement simple peut régler rapidement la question. Vous en trouverez une très bien réalisée par bobocop et traduite par mathieu.
La méthode consiste à écrire une expression régulière, tester avec la fonction preg_match sa validité de l'adresse e-mail passée en paramètre. La fonction retourne vrai si l'adresse e-mail est valide. Cet exemple est extrait de la FAQ PHP en date du 18 mai 2006. La FAQ PHP est régulièrement mise à jour par un constant enrichissement de son contenu. N'hésitez pas à la consulter pour obtenir une éventuelle version plus à jour Validation avec la classe Mail de PearLors du paragraphe précédent, nous avons vu la validation d'une adresse e-mail "simple" grâce à une expression régulière. Mais pour les adresses e-mails avec un entête, la fonction retourne "faux". Alors qu'il n'en est rien. PEAR propose une classe MAil_RFC822 permettant de récupérer un ensemble d'adresses e-mails valides dans un texte. Cette classe, plus lourde, permet de vérifier qu'une adresse e-mail est conforme à la RFC822. Après l'éventuelle installation de PEAR, ou du moins après le téléchargement des fichiers PEAR nécessaires. Vous pourrez faire appel à cette classe en faisant :
Voici les résultats de quelques tests :
Validation avec interrogation du serveurLes deux paragraphes précédents permettent uniquement de savoir si l'adresse e-mail est syntaxiquement valide. Mais rien ne garantit que le nom de domaine donné existe réellement. Pour ceux qui voudraient aller encore plus loin, et vérifier cela, nous allons appronfondir le sujet et tester l'existance du nom de domaine. Pour cela, nous allons vérifier que :
La première étape est similaire au second exemple.
La seconde étape extrait le nom de domaine de l'adresse e-mail entré.
La dernière étape, plus complexe, va interroger le serveur distant. Pour cela, nous allons faire appel à une autre classe de la bibliothèque PEAR.
Désormais, nous savons si l'adresse e-mail est valide et si le nom de domaine répond bel et bien. Vous pouvez trouver sur le web plusieurs variantes à cette méthode. Certaines vont envoyer un ping via icmp sur le port 8 de la machine. D'autres méthodes vont tester la présence d'un serveur web sur le port 80. Mais ces solutions sont moins fiables, voire médiocre. En effet, un firewall peut occulter ces ports et bloquer toute réponse. Pour cela, il faut une méthode fiable. Et les serveurs de noms sont là pour nous donner toutes les informations que nous souhaitons! Alors nous allons les interroger au moyen d'une autre classe PEAR : Net_DSN. La classe Net_DSN, ouvre un socket dans le but de directement interroger les seveurs de noms. Et ceci garantit des résultats fiables contrairement à une interrogation de ports aléatoires. Quelle solution adopter ?Comme nous avons pu le voir, la validation d'une adresse e-mail peut-être plus ou moins complexe à mettre en oeuvre. En fait, le plus important, comme d'ailleurs dans tout développement, est de bien discerner nos propres besoins et de choisir la solution la plus adaptée.
Une solution très fiable : l'activation par retour d' e-mail !Ces trois méthodes ont chacune défauts et avantages, mais elles ne vous garantissent qu'une chose : Votre serveur ne tentera pas d'envoyer un e-mail alors que l'adresse est syntaxiquement fausse, ou que le nom de domaine n'est que pure fiction. En effet, rien ne garantit que l'adresse e-mail entrée par l'internaute ne soit pas une adresse "bidon" appartenant à une malheureuse tierce personne, voire à personne ! C'est pourquoi, désormais, les webmasters vérifient l'adresse e-mail, puis stockent l'utilisateur dans une base de données. Ils joignent à cet utilisateur un code d'activation aléatoirement généré. Cependant les webmasters ne permettent pas encore à l'internaute d'utiliser leur site. Par exemple, pour une inscription sur un forum, l'utilisateur est enregistré mais n'a pas encore l'autorisation de poster de messages, de voter, etc.. En fait, les webmasters envoient un e-mail à l'adresse fournie : cet e-mail contient le code d'activation. Si l'internaute a fourni sa véritable adresse, alors il recevra l'e-mail contenant le code d'activation. Il sera en mesure de se rendre sur le site, et d'activer son compte via un formulaire ou un lien. C'est après vérification du code que son compte s'activera. Si tel n'est pas le cas, généralement, à court terme, l'inscription est supprimée de la base de données. En conclusion, choisissez l'une des trois méthodes. Si l'adresse e-mail est syntaxiquement correcte, alors envoyer un e-mail contenant un code d'activation vous garantira que l'internaute a bel et bien entré sa propre adresse. |