Vérification d’adresse email en PHP
Coder un script efficace de vérification d’emails est un chemin semé d’embuches.
Allez jeter un oeil sur les RFC 952, 1035, 2822, 3696 définissant la syntaxe officielle… outch !.
Heureusement depuis la version 5.2 de PHP, il existe un filtre tout prêt de validation (Cf l’article Utilisation des filtres en PHP5).
Mais est-ce suffisant ? Que faire des adresses telles que « moi@hotmal.fr« , « moi@gmal.fr« , « moi@lapeste.net » ?
Pour ceux qui tournent avec une version inférieure à 5.2 de PHP, vous pouvez vous rendre sur http://code.iamcal.com/php/rfc822/ pour télécharger les fonctions de validation de syntaxe (en PHP) respectant les normes citées plus haut.
Personnellement, j’utilise plutôt le code ci-dessous (surement pas parfait mais répondant à mes besoins) :
if( !preg_match( "/^(\w|-|\.)+@((\w|-)+\.)+[a-z]{2,6}$/i", $email ) )
{
//L'email renseigné semble mal formé.
return false;
}
Malheureusement, comme nous l’avons dit plus haut, quelque soit l’expression rationnelle utilisée, vous ne pouvez pas être sûr que l’adresse testée existe réellement .
En effet l’adresse « devzone@zone.dev » passe, la plupart du temps, les mailles du filet même si nous savons que le domaine « zone.dev » n’existe pas.
C’est pourquoi certains sites envoient un email de demande de confirmation à l’adresse renseignée pour la valider définitivement.
Certes efficace, cette méthode est contraignante pour l’internaute. Et le développeur peut se questionner sur son utilité (l’intégrité des adresses est-elle importante pour mon projet ?).
Pour un outil d’inscription à une newsletter on peut raisonnablement se dire que l’intégrité des données n’est pas critique et qu’un traitement PHP sera suffisant pour répondre à nos besoins.
Voici 2 pistes de réflexion pour agrémenter un script d’inscription à une newsletter :
- checkdnsrr() (fonction non disponible sous Windows)
- fsockopen()
list( $compte, $domaine ) = split( "@", $email, 2 );
if( !checkdnsrr( $domaine, 'MX' ) && !checkdnsrr( $domaine, 'A' ) )
{
//Le domaine de l'email renseigné semble incorrect.
return false;
}
if( !fsockopen( $domaine, 25, $errno, $errstr, 30 ) )
{
//Tentative de connexion au domaine de l'email renseigné.
return false;
}
Attention, certains hôtes ne répondent pas correctement à ces fonctions, il faudra donc s’appuyer sur un système de confirmation si une erreur est détectée.
Le développeur se basera donc sur la bonne foi de l’internaute en lui exposant au mieux les éventuelles erreurs de saisie.
Un commentaire
[...] PHP: Coder un script efficace de vérification d’emails est un chemin semé d’embuches. Vérification d’adresse email en PHP [...]
Déposez un commentaire