Je me demande jusqu'où les gens devraient aller pour valider leur adresse électronique. Mon domaine est principalement le développement Web, mais cela s'applique n'importe où.
J'ai vu quelques approches:
- Il suffit de vérifier s'il y a un "@" présent, ce qui est tout simple, mais bien sûr, pas si fiable
- un test regex plus complexe pour les formats de messagerie standard
- une regex complète contre la RFC 2822 - le problème, c'est qu'une adresse électronique peut souvent être valide, mais ce n'est probablement pas ce que l'utilisateur voulait dire
- Validation DNS
- Validation SMTP
Comme beaucoup de gens le savent peut-être (mais beaucoup ne le savent pas), les adresses de messagerie peuvent comporter de nombreuses variations étranges que la plupart des gens ne considèrent généralement pas (voir RFC 2822 3.4.1 ), mais vous devez penser aux objectifs de votre validation: essayez-vous simplement de vous assurer qu'un message électronique peut être envoyé à une adresse ou qu'il s'agit bien de ce que l'utilisateur voulait probablement mettre (ce qui est peu probable dans de nombreux cas plus obscurs de 'adresses).
Une option que j'ai envisagée consiste simplement à donner un avertissement avec une adresse plus ésotérique tout en permettant à la requête de passer, mais cela ajoute une complexité supplémentaire à un formulaire et la plupart des utilisateurs risquent d'être confus.
Bien que la validation DNS / SMTP semble être une évidence, je prévois des problèmes lorsque le serveur DNS / SMTP est temporairement indisponible et qu'un utilisateur est incapable de s'inscrire quelque part ou que son serveur SMTP ne prend pas en charge les fonctionnalités requises.
Comment des développeurs expérimentés peuvent-ils gérer cela? Existe-t-il d'autres approches que celles que j'ai énumérées?
Edit: J'ai complètement oublié la plus évidente de toutes, envoyer un e-mail de confirmation! Merci aux personnes qui ont répondu à cette question. Oui, celui-ci est assez infaillible, mais il nécessite des tracas supplémentaires de la part de toutes les personnes impliquées. L'utilisateur doit récupérer certains messages électroniques et le développeur doit garder en mémoire les données de l'utilisateur avant même que leur validité soit confirmée.
Réponses:
Il n'existe pas de moyen fiable à 100% de confirmer une adresse électronique valide autre que l'envoi d'un courrier électronique à l'utilisateur et l'attente d'une réponse, comme dans la plupart des forums.
J'irais avec la simple règle de validation "@", puis j'enverrais un courrier électronique à l'utilisateur pour confirmer son adresse électronique.
Bien que ce soit mon opinion personnelle ... j'attends d'autres suggestions.
la source
Une suggestion: ne rejetez pas les adresses contenant un +. Il est assez commun de les rejeter, mais c'est un caractère valide. Les utilisateurs de gmail peuvent utiliser [email protected] pour étiqueter et trier les messages entrants plus facilement.
la source
Dans votre message, il semble que lorsque vous dites "validation SMTP", vous entendez vous connecter au serveur et essayer un RCPT TO pour voir s'il est accepté. Étant donné que vous différenciez l'envoi d'un e-mail de confirmation, je suppose que vous souhaitez le faire en ligne avec les actions de l'utilisateur. Outre les problèmes tels que les problèmes de réseau, les pannes DNS, etc., la liste grise peut causer des ravages avec cette méthode. La méthode varie, mais essentiellement, la liste grise diffère toujours la première tentative de remise au destinataire par IP de connexion. Comme je l'ai dit, cela peut varier, certains hôtes peuvent rejeter des adresses non valides à la première tentative et ne différer que des adresses valides, mais il n'existe aucun moyen fiable de résoudre les différentes implémentations par programme.
Vous ne pouvez vous assurer qu'une adresse est valide et est soumise par son propriétaire qui le souhaite vraiment pour votre application est d'envoyer un e-mail de vérification. Eh bien, tant que le spam n'est pas filtré, je suppose =).
la source
Une autre faiblesse de l'utilisation d'un regex pour la validation du courrier électronique est qu'il est presque impossible d'attraper tous les domaines de niveau supérieur valides tout en rejetant tous les domaines non valides.
Par exemple, l'expression de base de l'e-mail dans la réponse de Jeff Atwood:
acceptera tout TLD de deux à quatre caractères. Ainsi, par exemple, les spams seront acceptés, mais les fichiers .museum et .travel (les deux TLD valides) seront rejetés.
Encore une raison pour laquelle il vaut mieux rechercher le @ et envoyer un courrier électronique de confirmation.
la source
Avec les noms de domaine internationaux, presque tout est possible:
Si vous souhaitez effectuer des tests, vous devez d’abord le convertir en punycode.
Sans punycode, tout ce que vous devriez faire est de vérifier que:
la source
Vous feriez mieux de vérifier des choses simples comme @ et. en JavaScript, puis envoyez-leur une vérification à leur adresse e-mail. S'ils vérifient leur compte, vous avez vous-même une adresse électronique valide. De cette façon, vous savez avec certitude que vous avez une adresse de travail et vous n'avez pas à être trop autoritaire dans le formulaire.
la source
/.+@.+\..+/
Utilisez un validateur open-source qui ne donne pas de faux négatifs. Aucun effort pour vous et validation robuste pour votre application.
J'ai maintenant rassemblé des cas tests de Cal Henderson, Dave Child, Phil Haack, Doug Lovell et RFC 3696. Au total, 158 adresses de test.
J'ai couru tous ces tests contre tous les validateurs que j'ai pu trouver. La comparaison est ici: http://www.dominicsayers.com/isemail
Je vais essayer de garder cette page à jour à mesure que les gens améliorent leurs validateurs. Merci à Cal, Dave et Phil pour leur aide et leur coopération dans la compilation de ces tests et la critique constructive de mon propre validateur .
Les gens devraient être conscients de l' errata contre le RFC 3696 en particulier. Trois des exemples canoniques sont en fait des adresses invalides. Et la longueur maximale d'une adresse est de 254 ou 256 caractères, et non de 320.
la source
Après examen des réponses (car j’ai complètement oublié les courriels de confirmation), il me semble qu’un compromis approprié pour une solution à faible frottement consisterait à:
la source
RegexBuddy propose les expressions régulières suivantes liées à la messagerie électronique depuis sa bibliothèque:
Adresse email (basique)
Adresse électronique (RFC 2822, simplifiée)
Mais j'ai tendance à être d'accord avec les réponses de Peter et SuperJoe; le seul vrai "test" est l'envoi d'un email de validation.
la source
[email protected]
. Vous devriez également dire qu'une correspondance insensible à la casse est requise car vous utilisez uniquement des majuscules ASCII.{2,}
J'ai travaillé dans 4 entreprises différentes où un membre du service d'assistance s'est fait engueuler par un certain O'Malley ou O'Brien ou une autre adresse e-mail avec une apostrophe. Comme suggéré précédemment, toutes les expressions rationnelles ne captureront pas tout, mais vous épargnerez des tracas et accepterez une apostrophe sans générer d'avertissement.
-
bmb
la source
Vous pouvez continuer à valider davantage la validation du courrier électronique pour vérifier si une boîte aux lettres existe. Cette technique a ses inconvénients (temps de développement et possibilité d’obtenir une liste noire pour une utilisation abusive). http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/
la source
Si vous souhaitez vérifier un courrier électronique (c’est-à-dire s’assurer que l’utilisateur possède l’adresse électronique), vous ne pouvez faire qu’un courrier électronique de confirmation. Là encore, beaucoup de gens ont des adresses de spam dédiées ou utilisent des services tels que OneWayMail . S'ils ne veulent pas vous donner leur adresse de messagerie réelle, ils ne le feront pas. Donc, fondamentalement, vous créez une obstruction de l'utilisateur.
S'agissant de la validation , pour s'assurer que l'utilisateur ne saisit pas involontairement une adresse e-mail erronée, c'est certainement la bonne motivation. Cependant, du moins pour les formulaires HTML (qui sont de loin le moyen le plus courant de collecter des adresses électroniques), ce n’est pas le bon instrument.
D'une part, vous ne pourrez pas reconnaître les fautes de frappe dans les "mots" de l'adresse e-mail. Vous n'avez aucun moyen de savoir que
[email protected]
c'est faux, uniquement sur la base du format.Mais plus important encore, du point de vue de l'utilisateur, il n'y a qu'une seule (ou une main pleine) d'adresses électroniques que vous pourriez éventuellement vouloir entrer. Et vous êtes probablement déjà entré.
Ainsi, plutôt que d'essayer de valider une adresse, vous devez vous assurer que tous les navigateurs reconnaissent le champ de messagerie et éliminent ainsi le besoin de taper l'adresse de messagerie en premier lieu. Bien sûr, cela ne s'applique pas, si vous construisez le type de site susceptible d'être touché par des utilisateurs qui n'ont jamais entré leur adresse de messagerie dans leur navigateur auparavant. Mais je suppose que les plus petits d'entre nous sont dans une telle situation.
la source
Je pense que cela dépend du contexte dans lequel vous utilisez l'e-mail. Les projets plus sérieux nécessitent une validation plus stricte, mais je pense que pour la plupart des choses, envoyer un email à l'adresse fournie avec un lien de conformation assurera la validité de l'adresse email.
la source
@ Mike - Je pense qu'une partie de la raison pour laquelle les courriels de confirmation sont envoyés n'a pas seulement pour but de s'assurer de la validité de l'adresse e-mail, mais également de son accessibilité par l'utilisateur qui l'a soumise. Une personne pourrait facilement insérer une faute de frappe d'une lettre dans l'adresse électronique qui mènerait à une adresse électronique valide différente, mais il s'agirait toujours d'une erreur car ce serait la mauvaise adresse.
la source
Le regex le plus complet et le plus précis que j'ai jamais rencontré pour la validation des courriels est celui qui est documenté ici . Ce n'est pas pour les faibles de coeur; c'est assez compliqué pour qu'il soit divisé en plusieurs parties afin de faciliter l'analyse par les humains (le code exemple est en Java). Mais dans les cas où la validation est justifiée, je ne pense pas que cela s'améliorera beaucoup.
Dans tous les cas, je suggérerais que vous utilisiez des tests unitaires pour confirmer que votre expression couvre les cas que vous jugez importants. De cette façon, vous pouvez être sûr de ne pas avoir cassé une affaire qui fonctionnait auparavant.
la source
Quoi que vous choisissiez, je pense que vous devez vous tromper en pensant que, dans 99% des cas, l’utilisateur sait réellement quelle est son adresse électronique. En tant que ressortissant australien, je trouve encore très occasionnellement une validation de messagerie très intelligente qui me dit que je ne peux pas avoir de domaine .com.au. Cela se produisait beaucoup plus tôt dans les premiers jours d'Internet, comme vous.
L'envoi d'un e-mail de confirmation ces jours-ci est acceptable pour les utilisateurs. Il est également utile pour l'activation et la validation de l'adresse fournie.
la source
Sur certains sites développés dans des endroits où j'ai travaillé, nous avons toujours utilisé des courriels de confirmation. Cependant, il était étonnamment courant que les utilisateurs tapent leur adresse e-mail d’une manière qui n’aurait pas pu fonctionner, puis continuent d’attendre l’e-mail de confirmation qui ne viendrait pas. Ajouter un code ad hoc (ou, pour la partie du nom de domaine, une vérification DNS) pour avertir l'utilisateur dans ces cas pourrait être une bonne idée.
Les cas communs que j'ai vus:
.br
à un.com
domaine ou le supprimer.br
d'un.com.br
domaine).www.
au début de la partie locale d'une adresse électronique (je ne l'invente pas; j'ai vu plusieurs adresses électroniques du formulaire[email protected]
).Il y avait des cas encore plus bizarres; des choses comme un nom de domaine complet en tant que partie locale, des adresses avec deux
@
(quelque chose comme[email protected]@example.com
) et ainsi de suite.Bien sûr, la plupart d’entre elles étaient toujours des adresses RFC-822 valides, alors techniquement, vous pouvez simplement laisser le MTA les gérer. Toutefois, il peut être utile d'avertir l'utilisateur que l'adresse e-mail entrée est erronée, notamment si votre public cible ne maîtrise pas très bien l'informatique.
la source
Toute la validation regex dans le monde n'empêchera pas quelqu'un d'entrer une adresse email incorrecte ou fausse. C'est juste énervant, vraiment.
la source
Cela dépend du but. Si vous êtes un fournisseur de services Internet et que vous devez valider que les utilisateurs créent des adresses électroniques valides, optez pour la Regex qui valide par rapport à tout ce qui est possible. Si vous voulez juste intercepter les erreurs des utilisateurs, que diriez-vous du modèle suivant:
[Tous les caractères, pas d'espaces] @ [lettres et chiffres] (. [Lettres et chiffres]) où le groupe final apparaît au moins une fois.
Le RegEx pour cela semblerait quelque chose comme ceci:
Et puis envoyez un email de confirmation pour être sûr.
la source
@ Yaakov (pourrait répondre avec une sorte de 'réponse' ici)
Je suis d'accord, mais je ne suis pas sûr que cela en vaut la peine. Nous avons également des champs de confirmation à cet effet (en répétant votre adresse e-mail). Une autre situation où le type de site pourrait justifier des approches différentes.
En outre, l’envoi d’un courrier électronique de confirmation ne permet pas à l’utilisateur initial d’indiquer que l’adresse qu’il a saisie est erronée. Après ne pas avoir reçu l'e-mail de confirmation, ils peuvent simplement présumer que votre application / site est défectueux. au moins, en permettant à l'utilisateur de commencer immédiatement à utiliser son compte, il pourrait corriger son adresse de messagerie, notamment si celle-ci est affichée à un endroit suffisamment visible.
la source
Chevaux de course.
Tous ceux-ci sont des systèmes de vérification de courrier électronique complets et valables en eux-mêmes, et pour un site Web donné, un sera plus approprié (ou aussi bon que nécessaire) que les autres. Dans de nombreux cas, plusieurs étapes de vérification peuvent être utiles.
Si vous développez un site Web pour une banque, vous souhaiterez en plus une vérification par courrier postal ou par téléphone.
Si vous développez un site Web pour un concours, vous voudrez peut-être n'en garder aucun - vérifiez les e-mails dans le post-traitement et si l'un d'eux échoue, c'est trop grave pour la personne qui l'a saisi - vous pouvez valoriser les performances du serveur étant donné le nombre élevé de personnes ( Concours télévisé, par exemple) visant à s’assurer que tout le monde est validé correctement en ligne.
Jusqu'où faut-il prendre la vérification de l'email?
Autant que nécessaire et justifié.
Et pas plus loin (KISS)
la source
J'ai également vu des sites qui protègent également les personnes utilisant des sites de compartiment de courrier indésirable temporaires, tels que Mailinator ou MyTrashMail , qui contournent le message de confirmation par courrier électronique. Je ne dis pas que vous devriez les filtrer, je dis simplement.
la source
Qu'essayez-vous de saisir dans la validation de votre courrier électronique?
La validation par regex des adresses électroniques peut, au mieux, vérifier que l'adresse est syntaxiquement correcte et relativement plausible. Comme cela a déjà été mentionné à maintes reprises, il risque également de rejeter les adresses livrables réelles si l'expression rationnelle n'est pas tout à fait correcte.
La vérification SMTP peut déterminer que l'adresse est livrable, sous réserve des limitations imposées par les listes grises ou par des serveurs configurés pour transmettre le moins d'informations possible sur leurs utilisateurs. Vous n'avez aucun moyen de savoir si le MTA a seulement prétendu accepter le courrier comme adresse fictive, puis l'a simplement laissé tomber sur le sol dans le cadre d'une stratégie anti-spam.
L'envoi d'un message de confirmation est toutefois le seul moyen de vérifier qu'une adresse appartient à l'utilisateur qui l'a entrée. Si je remplis votre formulaire, je peux facilement vous dire que mon adresse électronique est
[email protected]
. Une regex vous dira que c'est syntaxiquement valide, un SMTP RCPT TO vous dira que c'est une adresse livrable, mais c'est sûr que ce n'est pas mon adresse.la source
Avec l’avènement de HTML5, au moins une nouvelle approche s’ajoute aux possibilités: l’utilisation de l’entrée de type ' email ' qui permet la validation côté client. Les versions actuelles de Firefox, Chrome, Safari et Opera le prennent en charge (et les autres navigateurs le traitent simplement comme type = text, afin qu’il puisse être utilisé sans problème même si vous n’avez pas de validation, bien sûr.)
Cela ne peut jamais (comme il a été souligné à quelques reprises) garantir une adresse utilisable, mais cela peut être très bénéfique (et éventuellement remplacer la vérification côté serveur) aux endroits où il vous suffit de détecter les erreurs potentielles de l'utilisateur.
la source
<input type="email">
HTMLElement: dxr.mozilla.org/mozilla-central/source/dom/html/…Les trois principaux niveaux de validation des emails:
1) vérification de l'expression régulière pour une adresse e-mail correctement formatée [email protected]
2) vérification du domaine de messagerie sur les enregistrements MX pour voir si le nom de domaine dispose d'un service de messagerie
3) envoyer un email de confirmation avec un lien ou un code de confirmation
Niveau 1:
Dans Visual Studio, vous pouvez utiliser le "Validateur d'expressions régulières". Et dans la propriété "ValidationExpression", vous pouvez cliquer sur le bouton "..." qui contient un assistant pour ajouter le format d'expression régulière pour les adresses électroniques.
Niveau 2:
Voici mon code C # ci-dessous pour utiliser nslookup afin de vérifier si un domaine de messagerie contient des enregistrements MX valides. Fonctionne vite et bien sur Win 2008 R2 et Win 7.
une autre option consiste à utiliser le package de nuget Arsofttools, mais il peut être lent sur Windows Server 2008 R2, comme je l’ai déjà vu, mais s’exécute rapidement sur Win 7.
Niveau 3:
Pour la confirmation par courrier électronique, vous pouvez générer une URL hexadécimale spécifique au courrier électronique (à l'aide des fonctions de cryptage), etc. http://domain.com/validateEmail?code=abcd1234 pour valider l'adresse électronique lorsque l'utilisateur clique dessus. Il n'est pas nécessaire de stocker cette URL en mémoire.
la source