Vos applications valident-elles correctement les adresses e-mail ?
Retour sur les détails des spécifications

Le , par Idelways, Expert éminent sénior
Les adresses e-mail sont au cœur de toutes les applications Web. Et s'il y a bien une seule tâche commune à tous les projets de développement Web, c'est la validation de ces adresses.

Si cette validation peut sembler au premier abord simple, facilement accomplie par le test de conformité à une expression rationnelle, beaucoup de développeurs ignorent les détails des spécifications et risquent de rejeter des utilisateurs aux adresses e-mail peu habituelles certes, mais tout à fait conformes.

Le problème vient essentiellement du fait que les spécifications autorisent bien plus de caractères que ne le pensent beaucoup de développeurs. Les caractères ! $ & * – = ^ ` | ~ # % ‘ + / ? _ { } étant tous aussi valides les uns que les autres.

Les spécifications autorisent même la présence du caractère « @ » (arobase) dans la première partie de l'adresse pour peu qu'il soit échappé (précédé par un Antislash)

Cette problématique est d'autant plus compliquée que certains utilisateurs disposent d'adresses e-mail cette fois non conformes aux spécifications, mais tout à fait fonctionnelles.

Chris Sinjakli (un développeur anglais) préconise une solution plutôt radicale : ne valider l'adresse e-mail que par le lien (ou code) de validation envoyé au compte de messagerie en question.

Et vous ?

Comment validez-vous les adresses mail ?
Vos scripts de validation respectent-il les spécifications ?

Source : Blog de Chris Sinjakli


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Eric2a Eric2a - Membre émérite http://www.developpez.com
le 04/03/2011 à 17:48
Salut,

Quelque soit la manière dont nous testons l'intégrité de la chaine alpha-numérique correspondant à l'adresse e-mail (expressions rationnelles, fonctions de filtrages perso ou natives), il est utile de vérifier aussi l'existence du domaine.

En effet, même si une adresse semble valide, cela ne veux pas dire que le domaine associé existe ou supporte la réception d'emails.

Avec PHP, il existe la fonction...
bool checkdnsrr ( string $host [, string $type = "MX" ] )

Code php : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
<?php 
$f=(filter_var($email,FILTER_VALIDATE_EMAIL)!==false); 
if($f){ 
	$host=strtolower(substr(strrchr($email,'@'),1)); 
	$f=checkdnsrr($host,'MX'); 
} 
if($f) 
	echo 'Adresse valide'; 
else 
	echo 'Adresse invalide'; 
?>
Avatar de demenvil demenvil - Membre averti http://www.developpez.com
le 04/03/2011 à 19:45
Les filtres php pour ma part aussi
Bon des fois ça peut valider des adresse assez spéciale mais valide
Puis les regex ça pue ! :p
Si elle sont trop grosse ça alourdi l’exécution du script puis c'est rapidement plus trop lisible...
genre celle de Denouche
Code : Sélectionner tout
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])
C'est du grand n'importe quoi... En plus je suis sur que ça ne les valide pas toutes.
Avatar de jayfaze jayfaze - Membre actif http://www.developpez.com
le 04/03/2011 à 22:36
Citation Envoyé par demenvil  Voir le message
Les filtres php pour ma part aussi
Bon des fois ça peut valider des adresse assez spéciale mais valide
Puis les regex ça pue ! :p
Si elle sont trop grosse ça alourdi l’exécution du script puis c'est rapidement plus trop lisible...
genre celle de Denouche
Code : Sélectionner tout
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])
C'est du grand n'importe quoi... En plus je suis sur que ça ne les valide pas toutes.


T'es serieux toi ?
Puis les regex ça pue ! :p

Parceque ton soit disant filtre tu crois qu'il utilise quoi pour valider l'email ? la magie ?

Si elle sont trop grosse ça alourdi l’exécution du script

On peut faire du web avec autre chose que du php tu sais ...

en plus .....

bug php #43402

FILTER_VALIDATE_EMAIL is not RFC2822 compliant

Avatar de LhIaScZkTer LhIaScZkTer - Membre actif http://www.developpez.com
le 07/03/2011 à 12:36
Citation Envoyé par Denouche  Voir le message
Bonjour à tous,

Par ma part j'utilise la regex suivante :
Code : Sélectionner tout
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])
Ma source :
http://www.regular-expressions.info/email.html

Cette regex est, d'après le site,

Sous quel langage tu utilises cette solution ? J'ai essayé avec php, mais je n'ai jamais réussi à adapter la solution pour que ça fonctionne.

D'ailleurs si quelqu'un pouvait le partager ça serait vraiment cool
Avatar de Ludix Ludix - Membre du Club http://www.developpez.com
le 09/03/2011 à 9:49
This regular expression will only validate addresses that have had any comments stripped and replaced with whitespace (this is done by the module).

Est-ce à dire que même cette expression ne valide pas tout ?
Avatar de Scarfy Scarfy - Futur Membre du Club http://www.developpez.com
le 09/03/2011 à 9:49
"jean paul"@vatican.org est valable aussi.

pouet+abc@toto.fr aussi, mais attention lors de l'envoi du formulaire, le "plus" est régulièrement changé en espace...

La répétition est autorisée : toto--20110309@domaine.fr (me permet notamment de rajouter un paramètre de filtrage sur mon adresse email. Qmail dégage tous les mails qui arrivent après le 09/03/2011, sinon il les envoie à toto@domaine.fr

Enfin, la partie locale de l'adresse est sensible à la casse.
Toto@toto.fr est différent de toto@toto.fr
Si si...
Mais je vous l'accorde, de facto tout le monde les convertit en minuscules.
Avatar de revlis revlis - Membre du Club http://www.developpez.com
le 09/03/2011 à 9:50
Juste pour information, savez vous que les noms de domaines acceptent les caractères accentués ? (juste de tête : www.vente-privée.com)

Dans tous vos validateurs "fait main" combien autorisent les accents ?
Avatar de ProgVal ProgVal - Membre éclairé http://www.developpez.com
le 09/03/2011 à 10:08
Citation Envoyé par sunse8  Voir le message
Notons aussi que pour une application PHP, il suffit d'un simple :

Code : Sélectionner tout
filter_var($adresse_email, FILTER_VALIDATE_EMAIL)

Faux ! Même PHP n'est pas conforme aux spécifications : http://bugs.php.net/bug.php?id=53722
Avatar de ceweb ceweb - Membre régulier http://www.developpez.com
le 09/03/2011 à 16:42
J'utilise
Code : Sélectionner tout
1
2
 
if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$'
Sujet très intéressant, mais pour le moment il ajoute des doutes plutôt que des certitudes à cause les multiples solutions utilisables.

Cela mériterait un tuto ou un article avec une solution fiable à 99%
Avatar de ProgVal ProgVal - Membre éclairé http://www.developpez.com
le 09/03/2011 à 17:05
ceweb: je crois que là, c'est un peu trop permissif.
Avatar de Denouche Denouche - Futur Membre du Club http://www.developpez.com
le 18/03/2011 à 16:12
Citation Envoyé par LhIaScZkTer  Voir le message
Sous quel langage tu utilises cette solution ? J'ai essayé avec php, mais je n'ai jamais réussi à adapter la solution pour que ça fonctionne.

D'ailleurs si quelqu'un pouvait le partager ça serait vraiment cool

J'utilise cette regex en Java !

Citation Envoyé par jayfaze  Voir le message
Ouais, mais ca n'accepte pas les email ecrit en majuscule ? a moins que tu fasse un tolower d'abord ?

Et pour répondre à jayfaze, bien que je n'ai jamais eu de problème avec cette regex, à la parcourir on dirait que tu as raison, et qu'elle ne prend pas les majuscules.
Mais bon, une adresse email en majuscules c'est pas courant, étant donné qu'elles ne sont pas sensibles à la casse, mais je pense qu'en modifiant un tout petit peu la regex on peut ajouter facilement le support des majuscules.
Offres d'emploi IT
Ingénieur Support IT H/F
CLOUDWATT - Ile de France - Boulogne
Chef de projet technique facturation h/f
UpSourcing - Ile de France - Paris (75000)
Développeur front H/F
Oodrive - Bretagne - Vannes (56000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil