Quais são as boas bibliotecas de validação de endereço de email para Java? Existem alternativas para o validador do commons ?
validation
email
apache-commons
java
jon077
fonte
fonte
Respostas:
O Apache Commons é geralmente conhecido como um projeto sólido. No entanto, lembre-se de que você ainda precisará enviar um e-mail de verificação para o endereço se quiser garantir que seja um e-mail real e que o proprietário deseja que ele seja usado em seu site.
fonte
EmailValidator
classe Apache não envia uma mensagem de email para verificação.Usar o pacote oficial de email em java é o mais fácil:
fonte
.
,.com
,com.
,abc
e123
. Além disso, adicionar espaço em branco à esquerda ou à direita também não invalida as cadeias. Você é o juíz!O validador Apache Commons pode ser usado conforme mencionado nas outras respostas.
pom.xml:
build.gradle:
A importação:
O código:
e permitir endereços locais
fonte
Resposta tardia, mas acho que é simples e digna:
Casos de teste :
Para fins de produção, as validações de nomes de domínio devem ser realizadas em rede.
fonte
Se você estiver tentando fazer uma validação de formulário recebida do cliente ou apenas uma validação de bean - mantenha-o simples. É melhor fazer uma validação de e-mail solta do que estrita e rejeitar algumas pessoas (por exemplo, quando elas estão tentando se registrar no seu serviço da web). Com quase tudo o que é permitido na parte do nome de usuário do email e tantos domínios novos sendo adicionados literalmente todos os meses (por exemplo, empresa, .entreprise, .estate), é mais seguro não ser restritivo:
fonte
Atrasado para a pergunta, aqui, mas: Eu mantenho uma classe neste endereço: http://lacinato.com/cm/software/emailrelated/emailaddress
É baseado na classe de Les Hazlewood, mas possui inúmeras melhorias e corrige alguns bugs. Licença Apache.
Acredito que seja o analisador de email mais capaz em Java e ainda tenho que ver mais um em qualquer idioma, embora possa haver um por aí. Não é um analisador de estilo lexer, mas usa algum java regex complicado e, portanto, não é tão eficiente quanto poderia ser, mas minha empresa analisou mais de 10 bilhões de endereços do mundo real: é certamente utilizável em um alto desempenho situação. Talvez uma vez por ano, ele atinja um endereço que causa um estouro de pilha de expressões regulares (adequadamente), mas esses são endereços de spam com centenas ou milhares de caracteres com muitas aspas e parênteses.
O RFC 2822 e as especificações relacionadas são realmente bastante permissivas em termos de endereços de e-mail; portanto, uma classe como essa é um exagero para a maioria dos usos. Por exemplo, o seguinte é um endereço legítimo, de acordo com especificações, espaços e tudo:
Nenhum servidor de correio permitiria isso, mas essa classe pode analisá-lo (e reescrevê-lo para um formulário utilizável).
Descobrimos que as opções existentes do analisador de email Java são insuficientemente duráveis (ou seja, todas elas não podem analisar alguns endereços válidos), por isso criamos essa classe.
O código está bem documentado e possui muitas opções fáceis de alterar para permitir ou não certos formulários de email. Ele também fornece muitos métodos para acessar determinadas partes do endereço (lado esquerdo, lado direito, nomes pessoais, comentários, etc.), para analisar / validar cabeçalhos da lista de caixas de correio, analisar / validar o caminho de retorno (que é único entre os cabeçalhos) e assim por diante.
O código escrito tem uma dependência de javamail, mas é fácil de remover se você não deseja a funcionalidade secundária que ele fornece.
fonte
Só estou me perguntando por que ninguém surgiu com
@Email
as restrições adicionais do Hibernate Validator. O validador em si éEmailValidator
.fonte
Les Hazlewood escreveu uma classe minuciosa de validador de e-mail compatível com RFC 2822 usando expressões regulares Java. Você pode encontrá-lo em http://www.leshazlewood.com/?p=23 . No entanto, sua abrangência (ou a implementação do Java RE) leva à ineficiência - leia os comentários sobre o tempo de análise para endereços longos.
fonte
Portamos parte do código no Zend_Validator_Email:
Com um validador de nome de host, da seguinte maneira:
E um validIDNs.xml com padrões regex para os diferentes tlds (grandes demais para incluir :)
fonte
fonte
Se você deseja verificar se um endereço de e-mail é válido, o VRFY o ajudará em alguns aspectos . Descobri que é útil para validar endereços da intranet (ou seja, endereços de email para sites internos). No entanto, é menos útil para servidores de correio da Internet (veja as advertências na parte superior desta página)
fonte
Embora existam muitas alternativas para o Apache commons, suas implementações são rudimentares na melhor das hipóteses (como a própria implementação do Apache commons ) e até mesmo erradas em outros casos.
Eu também ficaria longe da regex chamada "não restritiva" simples; nao existe tal coisa. Por exemplo, @ é permitido várias vezes, dependendo do contexto, como você sabe que o requerido está lá? Regex simples não vai entender, mesmo que o email deva ser válido. Qualquer coisa mais complexa se torna propensa a erros ou até contém assassinos de desempenho ocultos . Como você está indo para manter algo como este ?
O único validador abrangente baseado em regex compatível com RFC que conheço é o email-rfc2822-validator com seu regex 'refinado' apropriadamente chamado Dragons.java . Porém, ele suporta apenas as especificações mais antigas da RFC-2822 , embora seja apropriado o suficiente para as necessidades modernas (a RFC-5322 atualiza -a em áreas já fora do escopo para casos de uso diários).
Mas, na verdade, o que você quer é um lexer que analise adequadamente uma string e a quebre na estrutura do componente, de acordo com a gramática RFC. O EmailValidator4J parece promissor a esse respeito, mas ainda é jovem e limitado.
Outra opção que você tem é usar um serviço da web, como o serviço da web de validação testado em batalha da Mailgun ou a API do Mailboxlayer (apenas obteve os primeiros resultados do Google). Não é estritamente compatível com RFC, mas funciona bem o suficiente para as necessidades modernas.
fonte
O que você deseja validar? O endereço de e-mail?
O endereço de email só pode ser verificado quanto à conformidade do formato. Veja o padrão: RFC2822 . A melhor maneira de fazer isso é uma expressão regular. Você nunca saberá se realmente existe sem enviar um email.
Eu verifiquei o validador do commons. Ele contém uma classe org.apache.commons.validator.EmailValidator. Parece ser um bom ponto de partida.
fonte
A versão atual do Apache Commons Validator é 1.3.1 .
A classe que valida é org.apache.commons.validator.EmailValidator. Ele tem uma importação para org.apache.oro.text.perl.Perl5Util, que é de um projeto ORO de Jakarta aposentado .
BTW, eu descobri que existe uma versão 1.4, aqui estão os documentos da API . No site , diz: "Última publicação: 05 de março de 2008 | Versão: 1.4-INSTANTÂNEO", mas isso não é final. A única maneira de construir a si mesmo (mas este é um instantâneo, não o RELEASE) e usar ou fazer o download aqui . Isso significa que 1,4 não foi finalizado por três anos (2008-2011). Isso não está no estilo do Apache. Estou procurando uma opção melhor, mas não encontrei uma que seja muito adotada. Eu quero usar algo que é bem testado, não quero bater nenhum bug.
fonte
Você também pode verificar o tamanho - os e-mails têm no máximo 254 caracteres. Eu uso o validador apache commons e ele não verifica isso.
fonte
local-part
comprimento de 64 e umdomain
comprimento de 255. (Eles fazem dizer que já não é permitido pelo pode ser rejeitado por outro software.)Parece não haver bibliotecas perfeitas ou maneiras de fazer isso sozinho, a menos que você tenha tempo para enviar um email para o endereço de email e aguardar uma resposta (talvez isso não seja uma opção). Acabei usando uma sugestão daqui http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/ e ajustando o código para que funcionasse em Java.
fonte
Este é o melhor método:
Fontes: - http://howtodoinjava.com/2014/11/11/java-regex-validate-email-address/
http://www.rfc-editor.org/rfc/rfc5322.txt
fonte
Outra opção é usar o validador de email do Hibernate , usando a anotação
@Email
ou a classe do validador programaticamente, como:fonte
Aqui está minha abordagem pragmática, onde eu só quero endereços blah @ domain razoáveis e distintos usando os caracteres permitidos do RFC. Os endereços devem ser convertidos para minúsculas com antecedência.
fonte