Каковы хорошие библиотеки проверки адресов электронной почты для Java? Существуют ли альтернативы валидатору общих ресурсов ?
validation
email
apache-commons
java
jon077
источник
источник
Ответы:
Apache Commons широко известен как солидный проект. Имейте в виду, что вам все равно придется отправлять подтверждающее электронное письмо на адрес, если вы хотите убедиться, что это реальное электронное письмо и что владелец хочет, чтобы он использовался на вашем сайте.
источник
EmailValidator
класс Apache не отправляет сообщение электронной почты для проверки.Использовать официальный пакет java для электронной почты проще всего:
источник
.
,.com
,com.
,abc
и123
. Кроме того, добавление начального или конечного пробела также не делает строки недействительными. Ты будешь судьей!Валидатор Apache Commons можно использовать, как указано в других ответах.
pom.xml:
build.gradle:
Импорт:
Код:
и разрешить локальные адреса
источник
Поздний ответ, но я думаю, что это просто и достойно
Тестовые случаи :
Для производственных целей проверки доменного имени должны выполняться по сети.
источник
Если вы пытаетесь выполнить проверку формы, полученную от клиента, или просто проверку бина - сделайте это просто. Лучше сделать свободную проверку электронной почты, чем проводить строгую проверку и отклонить некоторых людей (например, когда они пытаются зарегистрироваться для вашего веб-сервиса). Поскольку в части имени пользователя электронной почты почти все разрешено, и так много новых доменов добавляются буквально каждый месяц (например, .company, .entreprise, .estate), безопаснее не быть ограничительным:
источник
Поздно к вопросу, но здесь: я поддерживаю класс по этому адресу: http://lacinato.com/cm/software/emailrelated/emailaddress
Он основан на классе Les Hazlewood, но имеет множество улучшений и исправляет несколько ошибок. Лицензия Apache.
Я полагаю, что это самый способный анализатор электронной почты в Java, и мне еще предстоит увидеть еще один способный на любом языке, хотя там может быть один. Это не синтаксический анализатор в стиле лексера, он использует несколько сложное регулярное выражение java и, следовательно, не настолько эффективен, как мог бы быть, но моя компания проанализировала с его помощью более 10 миллиардов реальных адресов: его, безусловно, можно использовать в высокопроизводительных ситуация. Может быть, один раз в год он попадет на адрес, который вызывает переполнение стека регулярных выражений (соответственно), но это спам-адреса длиной в сотни или тысячи символов со множеством кавычек, скобок и тому подобного.
RFC 2822 и связанные с ним спецификации на самом деле довольно разрешительны с точки зрения адресов электронной почты, поэтому такой класс является излишним для большинства применений. Например, следующий адрес является допустимым, в соответствии со спецификацией, пробелами и всеми:
Ни один почтовый сервер не допустит этого, но этот класс может его проанализировать (и переписать в удобную для использования форму).
Мы обнаружили, что существующие параметры синтаксического анализатора электронной почты Java недостаточно надежны (то есть все они не могут проанализировать некоторые действительные адреса), поэтому мы создали этот класс.
Код хорошо документирован и имеет множество простых в изменении опций, позволяющих разрешать или запрещать определенные формы электронной почты. Он также предоставляет множество методов для доступа к определенным частям адреса (левая сторона, правая сторона, личные имена, комментарии и т. Д.), Для анализа / проверки заголовков списка почтовых ящиков, для анализа / проверки пути возврата. (что является уникальным среди заголовков) и так далее.
Написанный код имеет зависимость от javamail, но его легко удалить, если вам не нужны дополнительные функциональные возможности, которые он предоставляет.
источник
Мне просто интересно, почему никто не придумал
@Email
из дополнительных ограничений Hibernate Validator. Сам валидатор естьEmailValidator
.источник
Les Hazlewood написал очень тщательный класс валидатора электронной почты, совместимый с RFC 2822, используя регулярные выражения Java. Вы можете найти его на http://www.leshazlewood.com/?p=23 . Однако его тщательность (или реализация Java RE) приводит к неэффективности - читайте комментарии о времени разбора длинных адресов.
источник
Я портировал часть кода в Zend_Validator_Email:
С валидатором имени хоста следующим образом:
И validIDNs.xml с шаблонами регулярных выражений для разных tlds (слишком большой, чтобы включать :)
источник
источник
Если вы хотите проверить, является ли адрес электронной почты действительным, VRFY поможет вам в этом. Я обнаружил, что это полезно для проверки адресов интрасети (то есть адресов электронной почты для внутренних сайтов). Однако это менее полезно для интернет-почтовых серверов (см. Предостережения в верхней части этой страницы)
источник
Хотя существует много альтернатив Apache Commons, их реализации в лучшем случае рудиментарны (как и сама реализация Apache Commons ) и даже совершенно неверны в других случаях.
Я бы также держался подальше от так называемого простого «неограничительного» регулярного выражения; нет такого понятия. Например, @ допускается несколько раз в зависимости от контекста. Откуда вы знаете, что нужный там есть? Простое регулярное выражение не поймет этого, хотя электронная почта должна быть действительной. Все более сложное становится подверженным ошибкам или даже содержит скрытые убийства производительности . Как вы собираетесь поддерживать что - то вроде этого ?
Единственный известный мне валидатор на основе регулярных выражений, совместимый с RFC, - это email-rfc2822-validator с его «усовершенствованным» регулярным выражением, соответствующим образом названным Dragons.java . Он поддерживает только более старую спецификацию RFC-2822 , хотя и подходит для современных нужд (RFC-5322 обновляет ее в областях, которые уже выходят за рамки ежедневного использования).
Но на самом деле вам нужен лексер, который правильно анализирует строку и разбивает ее на структуру компонентов в соответствии с грамматикой RFC. EmailValidator4J выглядит многообещающим в этом отношении, но все еще молод и ограничен.
Другой вариант, который у вас есть, - использовать веб-сервис, такой как проверенный в бою веб-сервис валидации Mailgun или API Mailboxlayer (только что были получены первые результаты Google). Он не является строго RFC-совместимым, но работает достаточно хорошо для современных нужд.
источник
Что вы хотите проверить? Адрес электронной почты?
Адрес электронной почты может быть проверен только на соответствие формата. Смотрите стандарт: RFC2822 . Лучший способ сделать это - регулярное выражение. Вы никогда не узнаете, существует ли на самом деле, не отправив электронное письмо.
Я проверил валидатор общего достояния. Он содержит класс org.apache.commons.validator.EmailValidator. Кажется, это хорошая отправная точка.
источник
Текущая версия Apache Commons Validator - 1.3.1 .
Класс, который проверяет это org.apache.commons.validator.EmailValidator. Он имеет импорт для org.apache.oro.text.perl.Perl5Util, который взят из устаревшего проекта Jakarta ORO .
Кстати, я обнаружил, что есть версия 1.4, вот документы по API . На сайте написано: «Последнее опубликовано: 05 марта 2008 | Версия: 1.4-SNAPSHOT», но это еще не все. Единственный способ создать себя (но это снимок, а не РЕЛИЗ) и использовать, или скачать отсюда . Это означает, что 1.4 не был окончательным в течение трех лет (2008-2011). Это не в стиле Apache. Я ищу лучший вариант, но не нашел того, который был бы принят. Я хочу использовать что-то, что хорошо проверено, не хочу попадать в ошибки.
источник
Вы также можете проверить длину - максимальная длина электронных писем составляет 254 символа. Я использую валидатор Apache Commons, и он не проверяет это.
источник
local-part
длину 64 иdomain
длину 255. (Они говорят, что более длинное разрешено, может быть отклонено другим программным обеспечением.)Кажется, не существует идеальных библиотек или способов сделать это самостоятельно, если только у вас нет времени, чтобы отправить электронное письмо на адрес электронной почты и дождаться ответа (хотя это может быть и не вариант). В итоге я воспользовался предложением http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ и настроил код так, чтобы он работал в Java.
источник
Это лучший метод:
Источники: - http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
источник
Другой вариант - использовать валидатор электронной почты Hibernate , используя аннотацию
@Email
или программно используя класс валидатора, например:источник
Вот мой прагматичный подход, когда я просто хочу разумные отличные адреса blah @ domain, используя допустимые символы из RFC. Адреса должны быть переведены в нижний регистр заранее.
источник