Jakie są dobre biblioteki sprawdzania poprawności adresów e-mail dla Java? Czy są jakieś alternatywy dla walidatora wspólnego ?
validation
email
apache-commons
java
jon077
źródło
źródło
Odpowiedzi:
Apache Commons jest ogólnie znany jako solidny projekt. Pamiętaj jednak, że nadal musisz wysłać weryfikacyjny adres e-mail na adres, jeśli chcesz mieć pewność, że jest to prawdziwy adres e-mail i że właściciel chce, aby był on używany w Twojej witrynie.
źródło
EmailValidator
klasa Apache nie wysyła wiadomości e-mail w celu weryfikacji.Korzystanie z oficjalnego pakietu e-mail Java jest najłatwiejsze:
źródło
.
,.com
,com.
,abc
i123
. Ponadto dodanie wiodących lub końcowych białych znaków również nie unieważnia ciągów. Ty jesteś sędzią!Walidator Apache Commons może być używany jak wspomniano w innych odpowiedziach.
pom.xml:
build.gradle:
Import:
Kod:
i zezwalać na adresy lokalne
źródło
Późna odpowiedź, ale myślę, że jest to proste i godne:
Przypadki testowe :
Do celów produkcyjnych weryfikację nazw domen należy przeprowadzać w sieci.
źródło
Jeśli próbujesz przeprowadzić weryfikację formularza otrzymaną od klienta lub tylko weryfikację komponentu bean - zachowaj prostotę. Lepiej jest wykonać luźną weryfikację adresu e-mail niż ścisłą i odrzucić niektóre osoby (np. Kiedy próbują zarejestrować się w Twojej usłudze internetowej). Ponieważ prawie wszystko jest dozwolone w części e-mail dotyczącej nazwy użytkownika i tak wiele nowych domen jest dodawanych dosłownie każdego miesiąca (np. .Firma, .entreprise, .estate), bezpieczniej jest nie ograniczać:
źródło
Późno do pytania, tutaj, ale: Prowadzę zajęcia pod tym adresem: http://lacinato.com/cm/software/emailrelated/emailaddress
Opiera się na klasie Les Hazlewood, ale ma wiele ulepszeń i naprawia kilka błędów. Licencja Apache.
Wierzę, że jest to najbardziej wydajny parser wiadomości e-mail w Javie, i jeszcze nie widziałem jeszcze jednego zdolnego do działania w dowolnym języku, chociaż może istnieć taki. To nie jest parser w stylu leksykalnym, ale używa skomplikowanego wyrażenia regularnego java, a zatem nie jest tak wydajny, jak mógłby być, ale moja firma przeanalizowała z nim ponad 10 miliardów rzeczywistych adresów: z pewnością można go użyć w wysokiej wydajności sytuacja. Może raz w roku trafi na adres, który powoduje przepełnienie stosu wyrażeń regularnych (odpowiednio), ale są to adresy spamowe o długości setek lub tysięcy znaków z wieloma cytatami i nawiasami itp.
RFC 2822 i powiązane specyfikacje są naprawdę bardzo liberalne pod względem adresów e-mail, więc taka klasa jest nadmierna w przypadku większości zastosowań. Na przykład następujący adres jest zgodny z prawdą, zgodnie ze specyfikacją, spacjami i wszystkimi innymi:
Żaden serwer pocztowy nie pozwala na to, ale ta klasa może go parsować (i przepisać do użytecznej formy).
Odkryliśmy, że istniejące opcje parsera wiadomości e-mail Java są niewystarczająco trwałe (co oznacza, że wszystkie nie mogły przeanalizować niektórych prawidłowych adresów), dlatego stworzyliśmy tę klasę.
Kod jest dobrze udokumentowany i ma wiele łatwych do zmiany opcji, które pozwalają lub nie zezwalają na niektóre formularze e-mail. Zapewnia również wiele metod dostępu do niektórych części adresu (lewa strona, prawa strona, imiona, komentarze itp.), Parsowania / sprawdzania poprawności nagłówków list skrzynek pocztowych, parsowania / sprawdzania ścieżki powrotnej (co jest unikalne wśród nagłówków) i tak dalej.
Jak napisano, kod jest zależny od javamail, ale łatwo go usunąć, jeśli nie chcesz, aby zapewniał on mniejszą funkcjonalność.
źródło
Zastanawiam się tylko, dlaczego nikt nie wymyślił
@Email
dodatkowych ograniczeń Hibernacji Validatora. Sam walidator toEmailValidator
.źródło
Les Hazlewood napisał bardzo dokładną klasę walidatora wiadomości e-mail zgodną z RFC 2822, używając wyrażeń regularnych Java. Można go znaleźć na stronie http://www.leshazlewood.com/?p=23 . Jednak jego dokładność (lub implementacja Java RE) prowadzi do nieefektywności - przeczytaj komentarze na temat czasów analizy dla długich adresów.
źródło
Przeniesiłem część kodu w Zend_Validator_Email:
Z walidatorem nazwy hosta w następujący sposób:
I validIDNs.xml z wzorcami wyrażeń regularnych dla różnych tlds (zbyt duże, aby je uwzględnić :)
źródło
źródło
Jeśli chcesz sprawdzić, czy adres e-mail jest prawidłowy, VRFY pomoże ci to zrobić. Przekonałem się, że jest to przydatne do sprawdzania poprawności adresów intranetowych (to znaczy adresów e-mail wewnętrznych stron). Jest to jednak mniej przydatne w przypadku serwerów poczty internetowej (patrz zastrzeżenia u góry tej strony)
źródło
Chociaż istnieje wiele alternatyw dla wspólnych aplikacji Apache, ich implementacje są co najwyżej podstawowe (podobnie jak implementacja wspólnych aplikacji Apache) sama ), a nawet w innych przypadkach są błędne.
Trzymałbym się również z dala od tak zwanego prostego wyrażenia „nieograniczającego”; Nie ma takiej rzeczy. Na przykład @ jest dozwolony wiele razy w zależności od kontekstu. Skąd wiesz, że wymagany jest tam? Proste wyrażenie regularne tego nie zrozumie, nawet jeśli e-mail powinien być prawidłowy. Wszystko bardziej złożone staje się podatne na błędy, a nawet zawiera ukryte narzędzia zabijające wydajność . Jak masz zamiar utrzymać coś jak to ?
Jedyny wszechstronny walidator oparty na wyrażeniach regularnych zgodny z RFC, o którym wiem, to email-rfc2822-validator z jego „dopracowanym” wyrażeniem regularnym odpowiednio nazwanym Dragons.java . Obsługuje tylko starszą specyfikację RFC-2822 , choć jest wystarczająco odpowiednia do współczesnych potrzeb (RFC-5322 aktualizuje ją w obszarach, które są już poza zasięgiem codziennych zastosowań).
Ale tak naprawdę to, czego potrzebujesz, to leksyk, który poprawnie analizuje ciąg i rozbija go na strukturę komponentu zgodnie z gramatyką RFC. EmailValidator4J wydaje się obiecujący pod tym względem, ale wciąż jest młody i ograniczony.
Inną opcją jest korzystanie z usługi internetowej, takiej jak sprawdzona w bitwie usługa walidacyjna Mailgun lub API Mailboxlayer (właśnie wziąłem pierwsze wyniki Google). Nie jest ściśle zgodny z RFC, ale działa wystarczająco dobrze dla współczesnych potrzeb.
źródło
Co chcesz sprawdzić? Adres e-mail?
Adres e-mail można sprawdzić tylko pod kątem zgodności z formatem. Zobacz standard: RFC2822 . Najlepszym sposobem na to jest wyrażenie regularne. Nigdy nie dowiesz się, czy naprawdę istnieje bez wysłania wiadomości e-mail.
Sprawdziłem wspólny walidator. Zawiera klasę org.apache.commons.validator.EmailValidator. Wydaje się być dobrym punktem wyjścia.
źródło
Aktualna wersja Apache Commons Validator to 1.3.1 .
Sprawdzana klasa to org.apache.commons.validator.EmailValidator. Ma import dla org.apache.oro.text.perl.Perl5Util, który pochodzi z wycofanego projektu ORO w Dżakarcie .
BTW, znalazłem, że istnieje wersja 1.4, oto dokumentacja API . Na stronie jest napisane: „Ostatnia publikacja: 05 marca 2008 | Wersja: 1.4-SNAPSHOT”, ale to nie koniec. Jedyny sposób na zbudowanie siebie (ale to migawka, a nie WYDANIE) i użycie lub pobranie stąd . Oznacza to, że wersja 1.4 nie została sfinalizowana przez trzy lata (2008-2011). To nie jest w stylu Apache. Szukam lepszej opcji, ale nie znalazłem takiej, która jest bardzo dobrze przyjęta. Chcę użyć czegoś, co jest dobrze przetestowane, nie chcę trafiać w żadne błędy.
źródło
Możesz także sprawdzić długość - wiadomości e-mail mają maksymalnie 254 znaki. Używam sprawdzania poprawności wspólnego apache i nie sprawdza tego.
źródło
local-part
długość 64 idomain
długość 255. (Mówią, że dłuższe jest dozwolone przez może zostać odrzucone przez inne oprogramowanie.)Wydaje się, że nie ma żadnych doskonałych bibliotek ani sposobów na zrobienie tego sam, chyba że musisz zdążyć wysłać wiadomość e-mail na adres e-mail i poczekać na odpowiedź (może to jednak nie być opcja). Skończyło się na tym, że skorzystałem z sugestii http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ i dostosowałem kod, aby działał w Javie.
źródło
To najlepsza metoda:
Źródła: - http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
źródło
Inną opcją jest użycie walidatora e-mail Hibernacja , użycie adnotacji
@Email
lub programowe użycie klasy walidatora, na przykład:źródło
Oto moje pragmatyczne podejście, w którym chcę tylko rozsądnych odrębnych adresów bla @ domain przy użyciu dopuszczalnych znaków z RFC. Adresy należy wcześniej przekonwertować na małe litery.
źródło