Was sind die guten E-Mail-Adressüberprüfungsbibliotheken für Java? Gibt es Alternativen zum Commons Validator ?
validation
email
apache-commons
java
jon077
quelle
quelle
Antworten:
Apache Commons ist allgemein als solides Projekt bekannt. Beachten Sie jedoch, dass Sie weiterhin eine Bestätigungs-E-Mail an die Adresse senden müssen, wenn Sie sicherstellen möchten, dass es sich um eine echte E-Mail handelt und der Eigentümer möchte, dass sie auf Ihrer Website verwendet wird.
quelle
EmailValidator
Klasse sendet keine E-Mail-Nachricht zur Überprüfung.Die Verwendung des offiziellen Java-E-Mail-Pakets ist am einfachsten:
quelle
.
,.com
,com.
,abc
und123
. Das Hinzufügen von führenden oder nachfolgenden Leerzeichen macht die Zeichenfolgen ebenfalls nicht ungültig. Du entscheidest!Der Apache Commons-Validator kann wie in den anderen Antworten erwähnt verwendet werden.
pom.xml:
build.gradle:
Der Import:
Der Code:
und um lokale Adressen zuzulassen
quelle
Späte Antwort, aber ich denke, es ist einfach und würdig:
Testfälle :
Zu Produktionszwecken sollten Domänennamenüberprüfungen netzwerkweise durchgeführt werden.
quelle
Wenn Sie versuchen, eine vom Client erhaltene Formularvalidierung oder nur eine Bean-Validierung durchzuführen, halten Sie es einfach. Es ist besser, eine lose E-Mail-Validierung durchzuführen, als eine strikte durchzuführen und einige Personen abzulehnen (z. B. wenn sie versuchen, sich für Ihren Webdienst zu registrieren). Da fast alles im Benutzernamen der E-Mail erlaubt ist und so viele neue Domains buchstäblich jeden Monat hinzugefügt werden (z. B. Unternehmen, .entreprise, .estate), ist es sicherer, nicht einschränkend zu sein:
quelle
Spät zur Frage hier, aber: Ich unterhalte eine Klasse unter folgender Adresse: http://lacinato.com/cm/software/emailrelated/emailaddress
Es basiert auf der Klasse von Les Hazlewood, hat jedoch zahlreiche Verbesserungen und behebt einige Fehler. Apache-Lizenz.
Ich glaube, es ist der leistungsfähigste E-Mail-Parser in Java, und ich habe noch keinen fähigeren in einer beliebigen Sprache gesehen, obwohl es möglicherweise einen gibt. Es ist kein Parser im Lexer-Stil, verwendet jedoch einen komplizierten Java-Regex und ist daher nicht so effizient wie es sein könnte, aber mein Unternehmen hat damit weit über 10 Milliarden reale Adressen analysiert: Es ist sicherlich für eine hohe Leistung verwendbar Lage. Vielleicht trifft es einmal im Jahr eine Adresse, die (entsprechend) einen Überlauf des Regex-Stapels verursacht, aber dies sind Spam-Adressen, die Hunderte oder Tausende von Zeichen lang sind und viele, viele Anführungszeichen und Klammern und dergleichen enthalten.
RFC 2822 und die zugehörigen Spezifikationen sind in Bezug auf E-Mail-Adressen sehr zulässig. Daher ist eine Klasse wie diese für die meisten Verwendungszwecke zu viel des Guten. Zum Beispiel ist das Folgende eine legitime Adresse, je nach Spezifikation, Leerzeichen und allem:
Kein Mailserver würde dies zulassen, aber diese Klasse kann es analysieren (und in ein verwendbares Formular umschreiben).
Wir haben festgestellt, dass die vorhandenen Java-E-Mail-Parser-Optionen nicht ausreichend dauerhaft sind (dh alle konnten einige gültige Adressen nicht analysieren). Daher haben wir diese Klasse erstellt.
Der Code ist gut dokumentiert und bietet viele einfach zu ändernde Optionen, um bestimmte E-Mail-Formulare zuzulassen oder zu verbieten. Es bietet auch viele Methoden, um auf bestimmte Teile der Adresse zuzugreifen (linke Seite, rechte Seite, persönliche Namen, Kommentare usw.), Mailboxlisten-Header zu analysieren / zu validieren und den Rückweg zu analysieren / validieren (was unter den Überschriften einzigartig ist) und so weiter.
Der geschriebene Code hat eine Javamail-Abhängigkeit, kann jedoch leicht entfernt werden, wenn Sie die darin enthaltenen geringfügigen Funktionen nicht möchten.
quelle
Ich frage mich nur, warum sich niemand
@Email
die zusätzlichen Einschränkungen von Hibernate Validator ausgedacht hat. Der Validator selbst istEmailValidator
.quelle
Les Hazlewood hat eine sehr gründliche RFC 2822-kompatible E-Mail-Validierungsklasse mit regulären Java-Ausdrücken geschrieben. Sie finden es unter http://www.leshazlewood.com/?p=23 . Die Gründlichkeit (oder die Java RE-Implementierung) führt jedoch zu Ineffizienz. Lesen Sie die Kommentare zu den Analysezeiten für lange Adressen.
quelle
Ich habe einen Teil des Codes in Zend_Validator_Email portiert:
Mit einem Hostnamen-Validator wie folgt:
Und eine validIDNs.xml mit Regex-Mustern für die verschiedenen tlds (zu groß, um sie einzuschließen :)
quelle
quelle
Wenn Sie überprüfen möchten , ob eine E-Mail-Adresse gültig ist, hilft Ihnen VRFY dabei . Ich habe festgestellt, dass es nützlich ist, um Intranetadressen zu überprüfen ( dh E-Mail-Adressen für interne Websites). Für Internet-Mail-Server ist dies jedoch weniger nützlich (siehe die Einschränkungen oben auf dieser Seite).
quelle
Obwohl es viele Alternativen zu Apache Commons gibt, sind ihre Implementierungen bestenfalls rudimentär (wie die Implementierung von Apache Commons selbst) und in anderen Fällen sogar absolut falsch.
Ich würde mich auch von so genannten einfachen "nicht einschränkenden" Regex fernhalten. Das gibt es nicht. Zum Beispiel ist @ je nach Kontext mehrmals zulässig. Woher wissen Sie, dass das erforderliche vorhanden ist? Einfache Regex wird es nicht verstehen, obwohl die E-Mail gültig sein sollte. Alles , was komplexer ist, wird fehleranfällig oder enthält sogar versteckte Leistungskiller . Wie wollen Sie so etwas wie halten diese ?
Der einzige mir bekannte umfassende RFC-kompatible Regex-basierte Validator ist der E-Mail-rfc2822-Validator mit seinem 'verfeinerten' Regex mit dem passenden Namen Dragons.java . Es unterstützt jedoch nur die ältere RFC-2822- Spezifikation, obwohl dies für moderne Anforderungen geeignet ist (RFC-5322) aktualisiert sie in Bereichen, die für den täglichen Gebrauch bereits nicht verfügbar sind).
Aber was Sie wirklich wollen, ist ein Lexer , der einen String richtig analysiert und ihn gemäß der RFC-Grammatik in die Komponentenstruktur aufteilt.EmailValidator4J scheint in dieser Hinsicht vielversprechend, ist aber noch jung und begrenzt.
Eine weitere Option ist die Verwendung eines Webservices wie Mailguns kampferprobtem Validierungs-Webservice oder der Mailboxlayer-API (nur die ersten Google-Ergebnisse wurden verwendet). Es ist nicht streng RFC-konform, funktioniert aber gut genug für moderne Anforderungen.
quelle
Was möchten Sie validieren? Die E-Mail Adresse?
Die E-Mail-Adresse kann nur auf Formatkonformität überprüft werden. Siehe Standard: RFC2822 . Der beste Weg, dies zu tun, ist ein regulärer Ausdruck. Sie werden nie wissen, ob es wirklich existiert, ohne eine E-Mail zu senden.
Ich habe den Commons-Validator überprüft. Es enthält eine org.apache.commons.validator.EmailValidator-Klasse. Scheint ein guter Ausgangspunkt zu sein.
quelle
Die aktuelle Apache Commons Validator-Version ist 1.3.1 .
Die validierende Klasse ist org.apache.commons.validator.EmailValidator. Es hat einen Import für org.apache.oro.text.perl.Perl5Util, der aus einem pensionierten ORO-Projekt in Jakarta stammt .
Übrigens habe ich festgestellt, dass es eine 1.4-Version gibt, hier sind die API-Dokumente . Auf der Website heißt es: "Zuletzt veröffentlicht: 05. März 2008 | Version: 1.4-SNAPSHOT", aber das ist nicht endgültig. Nur so können Sie sich selbst erstellen (dies ist jedoch ein Schnappschuss, nicht RELEASE) und verwenden oder von hier herunterladen . Dies bedeutet, dass 1.4 seit drei Jahren (2008-2011) nicht endgültig ist. Dies ist nicht in Apaches Stil. Ich suche nach einer besseren Option, habe aber keine gefunden, die sehr gut angenommen wird. Ich möchte etwas verwenden, das gut getestet ist, und keine Fehler finden.
quelle
Möglicherweise möchten Sie auch die Länge überprüfen - E-Mails sind maximal 254 Zeichen lang. Ich benutze den Apache Commons Validator und er prüft dies nicht.
quelle
local-part
Länge von 64 und adomain
Länge von 255. (Sie sagen, dass länger erlaubt ist, könnte von anderer Software abgelehnt werden.)Es scheint keine perfekten Bibliotheken oder Möglichkeiten zu geben, dies selbst zu tun, es sei denn, Sie müssen Zeit haben, eine E-Mail an die E-Mail-Adresse zu senden und auf eine Antwort zu warten (dies ist jedoch möglicherweise keine Option). Am Ende habe ich einen Vorschlag von hier http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ verwendet und den Code so angepasst, dass er in Java funktioniert.
quelle
Dies ist die beste Methode:
Quellen: - http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
quelle
Eine andere Option ist die Verwendung des E-Mail-Validators im Ruhezustand , die Verwendung der Anmerkung
@Email
oder die programmgesteuerte Verwendung der Validator-Klasse, z.quelle
Hier ist mein pragmatischer Ansatz, bei dem ich nur vernünftige eindeutige blah @ domain-Adressen mit den zulässigen Zeichen aus dem RFC möchte. Adressen müssen vorher in Kleinbuchstaben umgewandelt werden.
quelle