Quelles sont les bonnes bibliothèques de validation des adresses e-mail pour Java? Existe-t-il des alternatives au validateur commun ?
validation
email
apache-commons
java
jon077
la source
la source
Réponses:
Apache Commons est généralement connu comme un projet solide. Gardez à l'esprit, cependant, vous devrez toujours envoyer un e-mail de vérification à l'adresse si vous voulez vous assurer qu'il s'agit d'un véritable e-mail et que le propriétaire souhaite qu'il soit utilisé sur votre site.
la source
EmailValidator
classe Apache n'envoie pas d'e-mail pour vérification.L'utilisation du package de messagerie Java officiel est la plus simple:
la source
.
,.com
,com.
,abc
et123
. De plus, l'ajout d'espaces blancs de début ou de fin n'invalide pas non plus les chaînes. Sois le juge!Le validateur Apache Commons peut être utilisé comme mentionné dans les autres réponses.
pom.xml:
build.gradle:
L'importation:
Le code:
et pour autoriser les adresses locales
la source
Réponse tardive, mais je pense que c'est simple et digne:
Cas de test :
À des fins de production, les validations de noms de domaine doivent être effectuées sur le réseau.
la source
Si vous essayez de faire une validation de formulaire reçue du client, ou juste une validation de bean - restez simple. Il vaut mieux faire une validation de courrier électronique lâche plutôt que de faire une validation stricte et rejeter certaines personnes (par exemple, lorsqu'elles essaient de s'inscrire à votre service Web). Avec presque tout ce qui est autorisé dans la partie nom d'utilisateur de l'e-mail et autant de nouveaux domaines étant ajoutés littéralement chaque mois (par exemple .company, .entreprise, .estate), il est plus sûr de ne pas être restrictif:
la source
Tard dans la question, ici, mais: je maintiens un cours à cette adresse: http://lacinato.com/cm/software/emailrelated/emailaddress
Il est basé sur la classe de Les Hazlewood, mais a de nombreuses améliorations et corrige quelques bugs. Licence Apache.
Je pense que c'est l'analyseur d'e-mails le plus performant de Java, et je n'ai pas encore vu un autre capable dans n'importe quelle langue, bien qu'il puisse y en avoir un. Ce n'est pas un analyseur de style lexer, mais utilise des expressions Java complexes, et n'est donc pas aussi efficace qu'il pourrait l'être, mais mon entreprise a analysé plus de 10 milliards d'adresses dans le monde réel avec lui: il est certainement utilisable dans une haute performance situation. Peut-être qu'une fois par an, il atteindra une adresse qui provoque un débordement de pile regex (de manière appropriée), mais ce sont des adresses de spam qui comptent des centaines ou des milliers de caractères avec de nombreuses citations et parenthèses, etc.
La RFC 2822 et les spécifications associées sont vraiment assez permissives en termes d'adresses e-mail, donc une classe comme celle-ci est exagérée pour la plupart des utilisations. Par exemple, ce qui suit est une adresse légitime, selon les spécifications, les espaces et tout:
Aucun serveur de messagerie ne permettrait cela, mais cette classe peut l'analyser (et le réécrire sous une forme utilisable).
Nous avons trouvé que les options existantes de l'analyseur de courrier électronique Java n'étaient pas suffisamment durables (ce qui signifie qu'elles ne pouvaient pas toutes analyser certaines adresses valides), nous avons donc créé cette classe.
Le code est bien documenté et propose de nombreuses options faciles à modifier pour autoriser ou interdire certains formulaires de courrier électronique. Il fournit également de nombreuses méthodes pour accéder à certaines parties de l'adresse (côté gauche, côté droit, noms personnels, commentaires, etc.), pour analyser / valider les en-têtes de liste de boîtes aux lettres, pour analyser / valider le chemin de retour (qui est unique parmi les en-têtes), etc.
Le code tel qu'il est écrit a une dépendance javamail, mais il est facile à supprimer si vous ne voulez pas les fonctionnalités mineures qu'il fournit.
la source
Je me demande simplement pourquoi personne n'est venu
@Email
des contraintes supplémentaires d'Hibernate Validator. Le validateur lui-même l'estEmailValidator
.la source
Les Hazlewood a écrit une classe de validation d'e-mails conforme à la RFC 2822 très approfondie en utilisant des expressions régulières Java. Vous pouvez le trouver sur http://www.leshazlewood.com/?p=23 . Cependant, sa rigueur (ou l'implémentation de Java RE) conduit à l'inefficacité - lisez les commentaires sur l'analyse des temps pour les adresses longues.
la source
J'ai porté une partie du code dans Zend_Validator_Email:
Avec un validateur de nom d'hôte comme suit:
Et un validIDNs.xml avec des motifs d'expression régulière pour les différents tlds (trop gros pour être inclus :)
la source
la source
Si vous cherchez à vérifier si une adresse e-mail est valide, alors VRFY vous aidera. J'ai trouvé que c'était utile pour valider les adresses intranet (c'est-à-dire les adresses e-mail des sites internes). Cependant, il est moins utile pour les serveurs de messagerie Internet (voir les mises en garde en haut de cette page)
la source
Bien qu'il existe de nombreuses alternatives à Apache commons, leurs implémentations sont au mieux rudimentaires (comme l'implémentation d'Apache commons elle-même) et même mortes dans d'autres cas.
Je resterais également à l'écart de ce que l'on appelle des expressions rationnelles simples et non restrictives; il n'y a rien comme ça. Par exemple, @ est autorisé plusieurs fois en fonction du contexte, comment savez-vous que celui requis est là? Une expression régulière simple ne le comprendra pas, même si l'e-mail doit être valide. Tout ce qui est plus complexe devient sujet aux erreurs ou contient même des tueurs de performances cachés . Comment allez-vous maintenir quelque chose comme ça ?
Le seul validateur basé sur les regex conformes à la RFC complète que je connaisse est le validateur email-rfc2822 avec son regex `` raffiné '' nommé de manière appropriée Dragons.java . Il ne prend en charge que les anciennes spécifications RFC-2822 , bien qu'il soit suffisamment approprié pour les besoins modernes (le RFC-5322 le met à jour dans des domaines déjà hors de portée pour les cas d'utilisation quotidiens).
Mais ce que vous voulez vraiment, c'est un lexer qui analyse correctement une chaîne et la décompose dans la structure des composants selon la grammaire RFC. EmailValidator4J semble prometteur à cet égard, mais est encore jeune et limité.
Vous pouvez également utiliser un service Web tel que le service Web de validation testé par Battlegun ou l' API Mailboxlayer (qui vient de prendre les premiers résultats de Google). Il n'est pas strictement conforme aux RFC, mais fonctionne assez bien pour les besoins modernes.
la source
Que voulez-vous valider? L'adresse e-mail?
L'adresse e-mail ne peut être vérifiée que pour sa conformité au format. Voir la norme: RFC2822 . La meilleure façon de le faire est une expression régulière. Vous ne saurez jamais s'il existe vraiment sans envoyer un e-mail.
J'ai vérifié le validateur commun. Il contient une classe org.apache.commons.validator.EmailValidator. Semble être un bon point de départ.
la source
La version actuelle du validateur Apache Commons est 1.3.1 .
La classe qui valide est org.apache.commons.validator.EmailValidator. Il a une importation pour org.apache.oro.text.perl.Perl5Util qui provient d'un projet retiré de Jakarta ORO .
BTW, j'ai trouvé qu'il existe une version 1.4, voici les docs API . Sur le site, il est écrit: "Dernière publication: 5 mars 2008 | Version: 1.4-INSTANTANÉ", mais ce n'est pas définitif. Seul moyen de vous construire (mais il s'agit d'un instantané, pas de publication) et d'utiliser ou de télécharger à partir d' ici . Cela signifie que 1.4 n'a pas été rendu définitif depuis trois ans (2008-2011). Ce n'est pas dans le style d'Apache. Je cherche une meilleure option, mais je n'en ai pas trouvé une qui soit très adoptée. Je veux utiliser quelque chose de bien testé, je ne veux pas rencontrer de bugs.
la source
Vous pouvez également vérifier la longueur - les e-mails contiennent au maximum 254 caractères. J'utilise le validateur apache commons et il ne vérifie pas cela.
la source
local-part
longueur de 64 et unedomain
longueur de 255. (Ils disent que plus de temps est autorisé par pourrait être rejeté par d'autres logiciels.)Il ne semble pas y avoir de bibliothèques ou de moyens parfaits pour le faire vous-même, sauf si vous avez le temps d'envoyer un e-mail à l'adresse e-mail et d'attendre une réponse (cela pourrait ne pas être une option cependant). J'ai fini par utiliser une suggestion d'ici http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ et ajuster le code pour qu'il fonctionne en Java.
la source
C'est la meilleure méthode:
Sources:- http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
la source
Une autre option consiste à utiliser le validateur de messagerie Hibernate , en utilisant l'annotation
@Email
ou en utilisant la classe de validateur par programme, comme:la source
Voici mon approche pragmatique, où je veux juste des adresses blah @ domain distinctes et raisonnables en utilisant les caractères autorisés du RFC. Les adresses doivent être préalablement converties en minuscules.
la source