¿Cuáles son las buenas bibliotecas de validación de direcciones de correo electrónico para Java? ¿Hay alguna alternativa al validador de bienes comunes ?
validation
email
apache-commons
java
jon077
fuente
fuente
Respuestas:
Apache Commons es generalmente conocido como un proyecto sólido. Sin embargo, tenga en cuenta que aún tendrá que enviar un correo electrónico de verificación a la dirección si desea asegurarse de que sea un correo electrónico real y que el propietario quiera que se use en su sitio.
fuente
EmailValidator
clase Apache no envía un mensaje de correo electrónico para su verificación.Usar el paquete oficial de correo electrónico de Java es lo más fácil:
fuente
.
,.com
,com.
,abc
y123
. Además, agregar espacios en blanco iniciales o finales tampoco invalida las cadenas. ¡Se el juez!El validador de Apache Commons se puede usar como se menciona en las otras respuestas.
pom.xml:
build.gradle:
La importación:
El código:
y para permitir direcciones locales
fuente
Respuesta tardía, pero creo que es simple y digno:
Casos de prueba :
Para fines de producción, las validaciones de nombres de dominio deben realizarse en red.
fuente
Si está intentando hacer una validación de formulario recibida del cliente, o simplemente una validación de bean, que sea simple. Es mejor hacer una validación de correo electrónico flexible en lugar de hacer una estricta y rechazar a algunas personas (por ejemplo, cuando intentan registrarse en su servicio web). Con casi todo lo permitido en la parte del nombre de usuario del correo electrónico y tantos dominios nuevos que se agregan literalmente cada mes (por ejemplo, .company, .entreprise, .estate), es más seguro no ser restrictivo:
fuente
Tarde a la pregunta, aquí, pero: mantengo una clase en esta dirección: http://lacinato.com/cm/software/emailrelated/emailaddress
Se basa en la clase de Les Hazlewood, pero tiene numerosas mejoras y corrige algunos errores. Licencia de Apache.
Creo que es el analizador de correo electrónico más capaz en Java, y todavía tengo que ver uno más capaz en cualquier idioma, aunque puede haber uno por ahí. No es un analizador de estilo lexer, pero utiliza algunas expresiones regulares de Java complicadas y, por lo tanto, no es tan eficiente como podría ser, pero mi compañía ha analizado más de 10 mil millones de direcciones del mundo real con él: ciertamente es utilizable en un alto rendimiento situación. Tal vez una vez al año llegue a una dirección que cause un desbordamiento de la pila de expresiones regulares (apropiadamente), pero estas son direcciones de correo no deseado que tienen cientos o miles de caracteres de largo con muchas comillas y paréntesis y similares.
RFC 2822 y las especificaciones relacionadas son realmente bastante permisivas en términos de direcciones de correo electrónico, por lo que una clase como esta es excesiva para la mayoría de los usos. Por ejemplo, la siguiente es una dirección legítima, de acuerdo con las especificaciones, espacios y todo:
Ningún servidor de correo permitiría eso, pero esta clase puede analizarlo (y reescribirlo en un formulario utilizable).
Descubrimos que las opciones existentes del analizador de correo electrónico Java son insuficientemente duraderas (lo que significa que no todas pudieron analizar algunas direcciones válidas), por lo que creamos esta clase.
El código está bien documentado y tiene muchas opciones fáciles de cambiar para permitir o rechazar ciertos formularios de correo electrónico. También proporciona muchos métodos para acceder a ciertas partes de la dirección (lado izquierdo, lado derecho, nombres personales, comentarios, etc.), para analizar / validar encabezados de lista de buzones, analizar / validar la ruta de retorno (que es único entre los encabezados), y así sucesivamente.
El código tal como está escrito tiene una dependencia de javamail, pero es fácil de eliminar si no desea la funcionalidad menor que proporciona.
fuente
Me pregunto por qué a nadie se le ocurrieron las
@Email
restricciones adicionales del Validador de Hibernate. El validador en sí esEmailValidator
.fuente
Les Hazlewood ha escrito una clase muy valiosa de validación de correo electrónico compatible con RFC 2822 utilizando expresiones regulares de Java. Puede encontrarlo en http://www.leshazlewood.com/?p=23 . Sin embargo, su minuciosidad (o la implementación de Java RE) conduce a la ineficiencia: lea los comentarios sobre los tiempos de análisis para direcciones largas.
fuente
Porté parte del código en Zend_Validator_Email:
Con un validador de nombre de host de la siguiente manera:
Y un IDNs.xml válido con patrones de expresiones regulares para los diferentes tlds (demasiado grande para incluir :)
fuente
fuente
Si está buscando verificar si una dirección de correo electrónico es válida, entonces VRFY lo ayudará. He encontrado que es útil para validar direcciones de intranet (es decir, direcciones de correo electrónico para sitios internos). Sin embargo, es menos útil para los servidores de correo de Internet (vea las advertencias en la parte superior de esta página)
fuente
Aunque hay muchas alternativas a los comunes de Apache, sus implementaciones son rudimentarias en el mejor de los casos (como la implementación de los comunes de Apache) ) e incluso están completamente equivocadas en otros casos.
También me mantendría alejado de la expresión regular simple "no restrictiva"; No hay tal cosa. Por ejemplo, @ se permite varias veces según el contexto, ¿cómo sabe que el requerido está allí? Regex simple no lo entenderá, a pesar de que el correo electrónico debe ser válido. Cualquier cosa más compleja se vuelve propensa a errores o incluso contiene asesinos de rendimiento ocultos . ¿Cómo vas a mantener algo como esto ?
El único validador basado en expresiones regulares que cumple con RFC que conozco es email-rfc2822-validator con su expresión 'refinada' apropiadamente llamada Dragons.java . Sin embargo, solo admite la especificación RFC-2822 anterior , aunque es lo suficientemente apropiada para las necesidades modernas (RFC-5322 la actualiza en áreas que ya están fuera del alcance de los casos de uso diario).
Pero lo que realmente quiere es un lexer que analice correctamente una cadena y la divida en la estructura del componente de acuerdo con la gramática RFC. EmailValidator4J parece prometedor en ese sentido, pero aún es joven y limitado.
Otra opción que tiene es usar un servicio web como el servicio web de validación probado por batalla de Mailgun o la API de Mailboxlayer (solo tomó los primeros resultados de Google). No es estrictamente compatible con RFC, pero funciona lo suficientemente bien para las necesidades modernas.
fuente
¿Qué quieres validar? ¿La direccion de correo electronico?
La dirección de correo electrónico solo se puede verificar por su conformidad de formato. Ver el estándar: RFC2822 . La mejor manera de hacerlo es una expresión regular. Nunca sabrá si realmente existe sin enviar un correo electrónico.
Revisé el validador de bienes comunes. Contiene una clase org.apache.commons.validator.EmailValidator. Parece ser un buen punto de partida.
fuente
La versión actual del Validador de Apache Commons es 1.3.1 .
La clase que valida es org.apache.commons.validator.EmailValidator. Tiene una importación para org.apache.oro.text.perl.Perl5Util que es de un proyecto retirado de Yakarta ORO .
Por cierto, descubrí que hay una versión 1.4, aquí están los documentos API . En el sitio dice: "Última publicación: 05 de marzo de 2008 | Versión: 1.4-INSTANTÁNEA", pero eso no es definitivo. La única forma de construirse usted mismo (pero esto es una instantánea, no una LIBERACIÓN) y usar o descargar desde aquí . Esto significa que 1.4 no ha sido finalizado por tres años (2008-2011). Esto no está en el estilo de Apache. Estoy buscando una mejor opción, pero no encontré una que sea muy adoptada. Quiero usar algo que esté bien probado, no quiero encontrar ningún error.
fuente
También es posible que desee verificar la longitud: los correos electrónicos tienen un máximo de 254 caracteres. Uso el validador de apache commons y no verifica esto.
fuente
local-part
longitud de 64 y unadomain
longitud de 255. (Dicen que más tiempo está permitido por otro software podría ser rechazado)Parece que no hay bibliotecas perfectas o formas de hacerlo usted mismo, a menos que tenga tiempo para enviar un correo electrónico a la dirección de correo electrónico y esperar una respuesta (aunque esto podría no ser una opción). Terminé usando una sugerencia desde aquí http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ y ajustando el código para que funcione en Java.
fuente
Este es el mejor método:
Fuentes: - http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
fuente
Otra opción es usar el validador de correo electrónico Hibernate , usando la anotación
@Email
o usando la clase de validador programáticamente, como:fuente
Aquí está mi enfoque pragmático, donde solo quiero direcciones de dominio blah @ razonables y distintas utilizando los caracteres permitidos del RFC. Las direcciones deben convertirse a minúsculas de antemano.
fuente