Não estou perguntando sobre a validação completa do email.
Eu só quero saber o que são permitidos caracteres user-name
e server
partes do endereço de email. Isso pode ser simplificado demais, talvez os endereços de e-mail possam assumir outras formas, mas não me importo. Estou perguntando apenas sobre este formulário simples: user-name@server
(por exemplo, [email protected]) e permiti caracteres em ambas as partes.
forms
email
email-validation
email-address
WildWezyr
fonte
fonte
+
é permitido. Isso me deixa maluco quando os sites não o permitem, porque meu e-mail contém+
e muitos sites não o permitem."hello world"@example.com
é válido.Respostas:
Consulte RFC 5322: Internet Message Format e, em menor grau, RFC 5321: Simple Mail Transfer Protocol .
O RFC 822 também cobre endereços de email, mas lida principalmente com sua estrutura:
E, como sempre, a Wikipedia possui um artigo decente sobre endereços de email :
Além dos caracteres ASCII, a partir de 2012 você pode usar caracteres internacionais acima
U+007F
, codificados como UTF-8, conforme descrito na especificação RFC 6532 e explicado na Wikipedia . Observe que, a partir de 2019, esses padrões ainda serão marcados como Propostos, mas serão lançados lentamente. As alterações nessa especificação adicionaram essencialmente caracteres internacionais como caracteres alfanuméricos válidos (texto) sem afetar as regras de caracteres especiais permitidos e restritos, como!#
e@:
.Para validação, consulte Usando uma expressão regular para validar um endereço de email .
A
domain
peça é definida da seguinte forma :fonte
[email protected]
não é um endereço de email válido, mas sim[email protected]
, mesmo que ambos usem os mesmos caracteres.Cuidado! Há um monte de podridão de conhecimento nesse segmento (coisas que costumavam ser verdadeiras e agora não são).
Para evitar rejeições falso-positivas de endereços de email reais no mundo atual e futuro e de qualquer lugar do mundo, você precisa conhecer pelo menos o conceito de alto nível da RFC 3490 , "Internacionalizando nomes de domínio em aplicativos (IDNA)". Eu sei que as pessoas nos EUA e A geralmente não gostam disso, mas ele já está em uso disseminado e rapidamente crescente em todo o mundo (principalmente nas partes dominadas que não são inglesas).
O essencial é que agora você pode usar endereços como mason @ 日本 .com e wildwezyr@fahrvergnügen.net. Não, isso ainda não é compatível com tudo o que existe por aí (como muitos já lamentaram acima, mesmo endereços simples no estilo qmail + ident são geralmente rejeitados incorretamente). Mas há uma RFC, há uma especificação, agora é apoiada pela IETF e ICANN e, mais importante, há um número crescente e crescente de implementações que suportam essa melhoria que estão em serviço no momento.
Eu não sabia muito sobre esse desenvolvimento até voltar para o Japão e começar a ver endereços de email como hei @ や る .ca e URLs da Amazon como este:
http://www.amazon.co.jp/ エ レ ク ト ロ ニ ス - デ ジ タ カ メ ラ - ポ ー タ ブ ル デ デ オ オ / b / ref = topnav_storetab_e? ie = UTF8 & node = 3210981
Sei que você não deseja links para especificações, mas se você confiar apenas no conhecimento desatualizado de hackers nos fóruns da Internet, seu validador de email acabará rejeitando endereços de email que usuários que não falam inglês esperam cada vez mais trabalhar. Para esses usuários, essa validação será tão irritante quanto a forma comum de morte encefálica que todos odiamos, aquela que não pode lidar com um + ou um nome de domínio em três partes ou o que seja.
Portanto, não estou dizendo que não é um aborrecimento, mas a lista completa de caracteres "permitidos sob algumas / quaisquer / nenhuma / nenhuma condição" é (quase) todos os caracteres em todos os idiomas. Se você deseja "aceitar todos os endereços de email válidos (e muitos inválidos também)", é necessário levar em consideração o IDN, o que basicamente torna inútil uma abordagem baseada em caracteres, a menos que você primeiro converta os endereços de email internacionalizados em Punycode .
Depois de fazer isso, você pode seguir (a maioria) os conselhos acima.
fonte
O formato do endereço de e-mail é:
local-part@domain-part
(máx. 64 @ 255 caracteres, não mais 256 no total).o
local-part
edomain-part
poderia ter um conjunto diferente de caracteres permitidos, mas isso não é tudo, pois há mais regras.Em geral, a parte local pode ter esses caracteres ASCII:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,!#$%&'*+-/=?^_`{|}~
,.
(não é o primeiro ou o último caractere ou repetido a menos que seja citado)"(),:;<>@[\]
(com algumas restrições),()
(são permitidos entre parênteses, por exemplo(comment)[email protected]
).Parte do domínio:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,-
(não é o primeiro ou o último caractere),jsmith@[192.168.2.1]
oujsmith@[IPv6:2001:db8::1]
.Esses endereços de email são válidos:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(parte local de uma letra)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
[email protected]
admin@mailserver1
(nome de domínio local sem domínio de nível superior)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(espaço entre aspas)example@localhost
(enviado do host local)[email protected]
(consulte a Lista de domínios de nível superior da Internet )user@com
user@localserver
user@[IPv6:2001:db8::1]
E estes exemplos de inválidos:
Abc.example.com
(sem@
caractere)A@b@[email protected]
(apenas um@
é permitido entre aspas)a"b(c)d,e:f;gi[j\k][email protected]
(nenhum dos caracteres especiais nesta parte local é permitido entre aspas)just"not"[email protected]
(as cadeias citadas devem ser separadas por pontos ou o único elemento que compõe a parte local)this is"not\[email protected]
(espaços, aspas e barras invertidas só podem existir quando estiverem dentro de cadeias entre aspas e precedidos por uma barra invertida)this\ still\"not\[email protected]
(mesmo que escapado (precedido por uma barra invertida), os espaços, as aspas e as barras invertidas ainda devem estar contidos entre aspas)[email protected]
(ponto duplo antes@
); (com ressalva: o Gmail deixa isso passar)[email protected]
(ponto duplo depois@
)Fonte: Endereço de email na Wikipedia
Regex RFC2822 do Perl para validação de e-mails:
Consulte também: Analisador de Endereço de Email RFC 822 em PHP .
As definições formais de endereços de email estão em:
Relacionado:
fonte
[email protected]
e o chame por dia.A Wikipedia tem um bom artigo sobre isso , e as especificações oficiais estão aqui . Partida Wikipdia:
fonte
O Google faz uma coisa interessante com seus endereços gmail.com. Os endereços gmail.com permitem apenas letras (az), números e pontos (que são ignorados).
por exemplo, [email protected] é o mesmo que [email protected], e os dois endereços de email serão enviados para a mesma caixa de correio. [email protected] também é entregue na mesma caixa de correio.
Portanto, para responder à pergunta, às vezes depende do implementador de quanto dos padrões RFC eles desejam seguir. O estilo de endereço gmail.com do Google é compatível com os padrões. Eles fazem dessa maneira para evitar confusão, onde pessoas diferentes usariam endereços de email semelhantes, por exemplo
O link da Wikipedia é uma boa referência sobre quais endereços de email geralmente permitem. http://en.wikipedia.org/wiki/Email_address
fonte
{john'doe}@my.server
sem nenhum problema. Testado com o servidor hMail também.{piotr'kula}@kula.solutions
- Se funcionar, você receberá uma boa resposta automática. Caso contrário, nada acontecerá.Você pode começar pelo artigo da wikipedia :
fonte
Nome:
Servidor:
fonte
<>
e[]
? Por exemplo"()<>[]:,;@\\\"!#$%&'-/=?^_
{} | ~ .a "@ example.org`?Verifique @ e. e, em seguida, envie um e-mail para verificação.
Ainda não consigo usar meu endereço de email .name em 20% dos sites da Internet porque alguém estragou sua validação de email ou porque antecede a validade dos novos endereços.
fonte
A resposta curta é que existem 2 respostas. Há um padrão para o que você deve fazer. ou seja, um comportamento sábio e que o manterá longe de problemas. Há outro padrão (muito mais amplo) para o comportamento que você deve aceitar sem causar problemas. Essa dualidade funciona para enviar e aceitar emails, mas tem ampla aplicação na vida.
Para um bom guia para os endereços que você cria; veja: http://www.remote.org/jochen/mail/info/chars.html
Para filtrar emails válidos, basta transmitir qualquer coisa compreensível o suficiente para ver a próxima etapa. Ou comece a ler um monte de RFCs, cuidado, aqui estão dragões.
fonte
Uma boa leitura sobre o assunto .
Excerto:
fonte
Joe.\\[email protected]
sem aspas. Isso é realmente válido? Não parece claro, dadas as respostas aqui, mas estou perguntando porque vi casos (muito raros) de seqüências de email DNS SoA rname que contêm barras invertidas.A resposta aceita se refere a um artigo da Wikipedia ao discutir a parte local válida de um endereço de email, mas a Wikipedia não é uma autoridade nisso.
O IETF RFC 3696 é uma autoridade nesse assunto e deve ser consultado na seção 3. Restrições nos endereços de email na página 5:
Como outros fizeram, envio uma regex que funciona tanto para PHP quanto para JavaScript para validar endereços de email:
fonte
Como pode ser encontrado neste link da Wikipedia
fonte
A resposta é (quase)
ALL
(ASCII de 7 bits).Se as regras de inclusão forem "... permitidas sob algumas / algumas / nenhumas condições ..."
Apenas observando uma das várias regras de inclusão possíveis para o texto permitido na parte "texto do domínio" na RFC 5322 na parte superior da página 17, encontramos:
os três únicos caracteres ausentes nesta descrição são usados no literal do domínio
[]
, para formar um par de aspas\
e o caractere de espaço em branco(% d32). Com isso, todo o intervalo 32-126 (decimal) é usado. Um requisito semelhante aparece como "qtext" e "ctext". Muitos caracteres de controle também são permitidos / usados. Uma lista desses caracteres de controle aparece na página 31, seção 4.1 do RFC 5322, como obs-NO-WS-CTL.
Todos esses caracteres de controle são permitidos conforme indicado no início da seção 3.5:
E essa regra de inclusão é, portanto, "muito ampla". Ou, em outro sentido, a regra esperada é "muito simplista".
fonte
Por uma questão de simplicidade, eu desinfecto o envio removendo todo o texto entre aspas duplas e os associados entre aspas duplas antes da validação, colocando o kibosh nos envios de endereços de email com base no que não é permitido. Só porque alguém pode ter o John .. "O * $ hizzle * Bizzle" .. O endereço [email protected] não significa que eu tenho que permitir isso no meu sistema. Estamos vivendo no futuro, onde talvez leve menos tempo para obter um endereço de e-mail gratuito do que para fazer um bom trabalho limpando sua bunda. E não é como se os critérios de e-mail não fossem colados ao lado da entrada dizendo o que é e o que não é permitido.
Também desinfecto o que especificamente não é permitido por várias RFCs após a remoção do material citado. A lista de caracteres e padrões especificamente não permitidos parece ser uma lista muito mais curta para testar.
Não permitido:
No exemplo dado:
Enviar uma mensagem de e-mail de confirmação para o resultado restante após uma tentativa de adicionar ou alterar o endereço de e-mail é uma boa maneira de verificar se seu código pode lidar com o endereço de e-mail enviado. Se o email passar na validação após quantas rodadas de higienização forem necessárias, inicie essa confirmação. Se uma solicitação retornar do link de confirmação, o novo email poderá ser movido do status ou armazenamento do purgatório || temporário || em espera para se tornar um email armazenado de primeira classe real e genuíno.
Uma notificação de falha ou sucesso na alteração do endereço de email pode ser enviada para o endereço de email antigo, se você quiser considerar. As configurações não confirmadas da conta podem cair fora do sistema, pois as tentativas com falha ocorreram completamente após um período de tempo razoável.
Não permito e-mails fedido no meu sistema, talvez isso seja apenas jogar dinheiro fora. Porém, 99,9% das vezes as pessoas fazem a coisa certa e têm um email que não leva os limites de conformidade ao limite, utilizando cenários de compatibilidade de casos extremos. Cuidado com o regex DDoS, este é um local onde você pode ter problemas. E isso está relacionado à terceira coisa que faço, eu limitei o tempo que estou disposto a processar qualquer email. Se ele precisar desacelerar minha máquina para ser validado - não estará ultrapassando a lógica do ponto de extremidade da minha API de dados de entrada.
Edit: Esta resposta continuou sendo enganada por ser "ruim", e talvez merecesse. Talvez ainda esteja ruim, talvez não.
fonte
No meu PHP eu uso essa verificação
tente você mesmo http://phpfiddle.org/main/code/9av6-d10r
fonte
Eu criei esse regex de acordo com as diretrizes da RFC:
fonte
O Gmail permitirá apenas o sinal de + como caractere especial e, em alguns casos (.), Mas outros caracteres especiais não são permitidos no Gmail. A RFC diz que você pode usar caracteres especiais, mas evite enviar e-mails para o Gmail com caracteres especiais.
fonte