Os endereços de email diferenciam maiúsculas de minúsculas?

305

Eu li que pela primeira parte padrão de e-mail é maiúsculas e minúsculas, no entanto eu tentei enviar e-mail para [email protected], [email protected]e [email protected]- que chegou em cada caso.

Como os servidores de email lidam com nomes de usuário? É possível errar com o caso e essa mensagem não seria entregue? É realmente muito importante usar exatamente a mesma letra maiúscula, como foi escrito durante o registro ao fornecer seu endereço de e-mail?

Perseguidor
fonte
Pergunta relacionada - stackoverflow.com/questions/9013726/…
Luke Girvin

Respostas:

366

No RFC 5321, seção 2.3.11 :

A convenção de nomenclatura da caixa de correio padrão é definida como "parte local @ domínio"; o uso contemporâneo permite um conjunto de aplicativos muito mais amplo do que simples "nomes de usuário". Consequentemente, e devido a uma longa história de problemas quando hosts intermediários tentaram otimizar o transporte, modificando-os, a parte local DEVE ser interpretada e semântica atribuída apenas pelo host especificado na parte do domínio do endereço.

Portanto, sim, a parte anterior ao "@" pode fazer distinção entre maiúsculas e minúsculas, pois está totalmente sob o controle do sistema host. Na prática, porém, nenhum sistema de correio amplamente utilizado distingue endereços diferentes com base no caso.

A parte após o sinal @, porém, é o domínio e, de acordo com a RFC 1035 , seção 3.1,

"Os servidores e resolvedores de nomes devem comparar [domínios] de uma maneira que não diferencia maiúsculas de minúsculas"

Em resumo, você pode tratar endereços de email como não diferenciando maiúsculas de minúsculas.

Mike E
fonte
81
"Em resumo, você pode tratar endereços de email como não diferencia maiúsculas de minúsculas." Eu diria que é mais forte: "você é inseguro para tratar endereços de e-mail como distinção entre maiúsculas e minúsculas" Especialmente ao procurar duplicatas em bancos de dados de usuários etc.
Geert-Jan
61
Eu discordo da conclusão. Se você está procurando duplicatas em um banco de dados - sim, provavelmente uma correspondência sem distinção entre maiúsculas e minúsculas é o melhor caminho a seguir, mas já vi o código no qual o endereço de email é convertido em minúsculas antes do envio. Essa não é uma boa ideia, pois há uma pequena chance de não ser entregue. Portanto, como você o trata depende das consequências do erro e do que você está fazendo com os endereços de email naquele momento (agrupando uma lista de endereços exclusivos, enviando um email, etc.).
Peter Bagnall
11
Alguém sabe de uma lista de produtos de correio que (a) rejeitam um [email protected] quando o usuário [email protected] é válido ou (b) permitem que duas caixas de correio distintas sejam criadas: John .Doe @ company.com e [email protected]?
MSC
51
Eu trabalho em uma grande empresa e há outra pessoa com o mesmo nome e sobrenome. Descobri hoje que a parte local dele difere da minha apenas em letras maiúsculas. Como o sistema está funcionando corretamente, fiquei surpreso ao ver "nenhum sistema de correio amplamente utilizado distinguir endereços diferentes com base no caso". Usamos o MS Exchange, que eu chamaria de "amplamente utilizado".
Matthew James Briggs
7
RFC 5321 2.4. Princípios gerais de sintaxe e modelo de transação - As implementações de SMTP DEVEM ter o cuidado de preservar o caso das peças locais da caixa de correio. Em particular, para alguns hosts, o usuário "smith" é diferente do usuário "Smith". Os domínios de caixa de correio seguem regras DNS normais e, portanto, não diferenciam maiúsculas de minúsculas.
precisa saber é o seguinte
43

Sei que essa é uma pergunta antiga, mas só quero comentar aqui: em qualquer extensão, os endereços de email diferenciam maiúsculas de minúsculas, a maioria dos usuários seria "muito imprudente" ao usar ativamente um endereço de email que requer letras maiúsculas. Em breve, eles parariam de usar o endereço porque perderiam muitas correspondências. (A menos que eles tenham um motivo específico para dificultar as coisas e esperem emails apenas de remetentes específicos que eles conhecem).

Isso ocorre porque existem seres humanos imperfeitos e software imperfeito, (surpresa!), Que assumirá que todos os emails são minúsculos e, por esse motivo, esses seres humanos e software enviarão mensagens usando uma "versão mais baixa" do endereço, independentemente de como ele foi fornecido para eles. Se o destinatário não puder receber essas mensagens, não demorará muito para perceber que está faltando muito e mudar para um endereço de e-mail apenas em minúsculas ou para que o servidor esteja configurado para não diferenciar maiúsculas de minúsculas.

PaulOTron2000
fonte
14
Esta é uma aplicação perspicaz da lei de Postel en.wikipedia.org/wiki/Robustness_principle . Ainda é errado escrever um software que suponha que partes locais de endereços de e-mail não fazem distinção entre maiúsculas e minúsculas, mas sim, dado que há muito software errado por aí, também é menos robusto exigir a distinção entre maiúsculas e minúsculas, caso você aceite o e-mail. .
zigg
1
Uma das coisas que mais me frustra são os sites que me obrigam a escrever meu e-mail em letras minúsculas. Acabei de lançar um comentário irado para o Twitch.tv sobre isso no que diz respeito ao site de suporte. Eles impedi-lo de ainda entrar maiúsculas em seu site. Portanto, embora eu saiba que meu servidor de e-mail as trata como não diferencia maiúsculas de minúsculas e que a RFC diz que diferencia maiúsculas de minúsculas, os sites NUNCA devem fazer suposições de qualquer maneira e devem simplesmente passar pelo que o usuário digita. HOMEM que é tão chato !!!
Mark A. Donohoe
Pessoalmente, quando digito meu e-mail em algum lugar, prefiro usar maiúsculas e minúsculas, para que fique mais legível. Por exemplo: [email protected] (Não é o meu endereço real.) Faço isso mesmo que receba o email sem maiúsculas.
PaulOTron2000
Como autor de software, no entanto, você prefere que seu serviço seja um dos poucos que fazem as coisas certas para essa pessoa com e-mail com distinção entre maiúsculas e minúsculas.
Klesun
31

Muito tarde para este post, mas tenho algo um pouco diferente a dizer ...

>> "Are email addresses case sensitive?"

Bem, "Depende ..." (TM)

Algumas organizações realmente acham que é uma boa ideia e seus servidores de email reforçam a distinção entre maiúsculas e minúsculas.

Portanto, para esses lugares malucos, "Sim, os e-mails diferenciam maiúsculas de minúsculas".

Nota: Só porque uma especificação diz que você pode fazer algo não significa que é uma boa ideia fazê-lo.

O princípio do KISS sugere que nossos sistemas usem emails que não diferenciam maiúsculas de minúsculas.

Considerando que o princípio Robustez sugere que aceitamos emails com distinção entre maiúsculas e minúsculas.

Solução:

  • Armazene emails com distinção entre maiúsculas e minúsculas
  • Envie e-mails com distinção entre maiúsculas e minúsculas
  • Realize pesquisas internas com distinção entre maiúsculas e minúsculas

Isso significa que, se este e-mail já existir: [email protected]

... e outro usuário aparece e deseja usar este email: [email protected]

... que nossa lógica de pesquisa que não diferencia maiúsculas de minúsculas retornaria uma mensagem de erro "Esse email já existe".

Agora, você tem uma decisão a tomar: essa solução é adequada no seu caso?

Caso contrário, você poderá cobrar uma taxa de conveniência aos clientes que exigirem suporte para seus e-mails com distinção entre maiúsculas e minúsculas e implementar lógica personalizada que permita o [email protected] em seu sistema, mesmo se [email protected] já existir.

Nesse caso, sua lógica de pesquisa / validação de email pode se parecer com algo como esse pseudocódigo:

if (user.paidEmailFee) {
   // case sensitive email
   query = "select * from users where email LIKE ' + user.email + '"
} else {
   // case insensitive email
   query = "select * from users where email ILIKE ' + user.email + '"
}

Dessa forma, você está impondo a distinção entre maiúsculas e minúsculas, mas permitindo que os clientes paguem por esse suporte se estiverem usando sistemas de e-mail compatíveis com esse absurdo.

ps ILIKE é uma palavra-chave do PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html

l3x
fonte
8
LIKE / ILIKE para uma correspondência exata é uma péssima ideia. Imagine um e-mail contendo %ou, mais provavelmente_
ThiefMaster
18
Seus pontos são ótimos! Mas a injeção de sql no seu exemplo meio que arruina :(
epelc 19/09/16
6
@epelc ISTO. Não posso concordar mais. Esse tipo de construção de consulta não deve ser gravado em nenhum lugar, mesmo que seja apenas um exemplo.
XDaizu
1
@ l3x, embora eu não seja tão fortemente contra o código de exemplo acima como os outros, especificamente porque você o chamou como pseudocódigo e é apenas para fins ilustrativos, talvez todos os comentários acima possam ser abordados, substituindo suas query = ...linhas por query = // Insert case-sensitive/insensitive search herecomentários simples, pois mantêm a conversa longe do tópico sobre injeção de SQL e se concentram no que você está tentando mostrar. Em outras palavras, mantenha-o na lógica, não na implementação. Silenciará os críticos.
Mark A. Donohoe
10

Padrões Abertos da IETF RFC 5321 2.4. Princípios Gerais de Sintaxe e Modelo de Transação

As implementações SMTP DEVEM ter o cuidado de preservar o caso das peças locais da caixa de correio. Em particular, para alguns hosts, o usuário "smith" é diferente do usuário "Smith".

Os domínios de caixa de correio seguem regras DNS normais e, portanto, não diferenciam maiúsculas de minúsculas

Adam111p
fonte
3

Por @ l3x, depende.

Existem claramente dois conjuntos de situações gerais em que a resposta correta pode ser diferente, juntamente com um terceiro que não é tão geral:

a) Você é um usuário enviando e-mails particulares :

Pouquíssimos sistemas de email modernos implementam a distinção entre maiúsculas e minúsculas; portanto, você provavelmente pode ignorar maiúsculas e minúsculas e escolher qualquer que deseje usar. Não há garantia de que todos os seus e-mails serão entregues - mas tão poucos e-mails seriam afetados negativamente que você não deveria se preocupar com isso.

b) Você está desenvolvendo software de correio :

Veja o trecho 2.4 do RFC5321 na parte inferior.

Ao desenvolver um software de correio, você quer ser compatível com RFC. Você pode fazer com que os endereços de e-mail de seus próprios usuários não façam distinção entre maiúsculas e minúsculas, se desejar (e provavelmente deve). Mas, para ser compatível com RFC, você DEVE tratar endereços externos como distinção entre maiúsculas e minúsculas .

c) Gerenciando listas de endereços de e-mail de propriedade da empresa como funcionário :

É possível que o mesmo destinatário de email seja adicionado a uma lista mais de uma vez - mas usando maiúsculas e minúsculas. Nessa situação, embora os endereços sejam tecnicamente diferentes, isso pode resultar em um destinatário recebendo emails duplicados. O modo como você trata essa situação é semelhante à situação a), pois provavelmente você pode tratá-las como duplicatas e remover uma entrada duplicada. É melhor tratá-los como casos especiais, no entanto, enviando um email de "lembrete" para os dois endereços para perguntar se eles são duplicados um do outro e, em caso afirmativo, qual endereço de email o destinatário prefere que você use.

Do ponto de vista jurídico, se você remover uma duplicata sem reconhecimento / permissão dos dois endereços, poderá ser responsabilizada por vazar informações / autenticação privadas para um endereço não autorizado, simplesmente porque dois destinatários realmente separados têm o mesmo endereço em casos diferentes .

Trecho da RFC5321 2.4:

A parte local de uma caixa de correio DEVE SER tratada como sensível a maiúsculas e minúsculas. Portanto, implementações SMTP DEVEM ter o cuidado de preservar o caso de peças locais da caixa de correio. Em particular, para alguns hosts, o usuário "smith" é diferente do usuário "Smith". No entanto, explorar a distinção entre maiúsculas e minúsculas das peças locais da caixa de correio impede a interoperabilidade e é desencorajado.

zaTricky
fonte