Les adresses e-mail sont-elles sensibles à la casse?

305

J'ai lu que la première partie standard de l'e-mail est sensible à la casse, mais j'ai essayé d'envoyer un e-mail à [email protected], [email protected]et [email protected]- il est arrivé dans chaque cas.

Comment les serveurs de messagerie gèrent-ils les noms d'utilisateur? Est-il possible de rater l'affaire et ce message ne serait pas transmis? Est-il vraiment très important d'utiliser exactement la même casse, comme cela a été écrit lors de l'inscription en donnant votre adresse e-mail?

Stalker
la source
Question connexe - stackoverflow.com/questions/9013726/…
Luke Girvin

Réponses:

366

De RFC 5321, section 2.3.11 :

La convention de dénomination standard de la boîte aux lettres est définie comme "local-part @ domain"; l'utilisation contemporaine permet un ensemble d'applications beaucoup plus large que les simples "noms d'utilisateur". Par conséquent, et en raison d'une longue histoire de problèmes lorsque des hôtes intermédiaires ont tenté d'optimiser le transport en les modifiant, la partie locale DOIT être interprétée et affectée à la sémantique uniquement par l'hôte spécifié dans la partie domaine de l'adresse.

Alors oui, la partie avant le "@" pourrait être sensible à la casse, car elle est entièrement sous le contrôle du système hôte. En pratique cependant, aucun système de messagerie largement utilisé ne distingue les différentes adresses en fonction de la casse.

La partie après le signe @ est cependant le domaine et selon la RFC 1035 , section 3.1,

"Les serveurs de noms et les résolveurs doivent comparer les [domaines] de manière non sensible à la casse"

En bref, vous êtes sûr de traiter les adresses e-mail comme insensibles à la casse.

Mike E
la source
81
"En bref, vous êtes sûr de traiter les adresses e-mail comme insensibles à la casse" Je le dirais plus fort: "vous n'êtes pas sûr de traiter les adresses e-mail de manière sensible à la casse" Surtout lors de la vérification des doublons dans les bases de données des utilisateurs, etc.
Geert-Jan
61
Je ne suis pas d'accord avec la conclusion. Si vous recherchez des doublons dans une base de données - oui, une correspondance insensible à la casse est probablement la meilleure solution, mais j'ai vu du code dans lequel l'adresse e-mail est convertie en minuscules avant l'envoi. Ce n'est pas une bonne idée, car il y a une petite chance qu'il ne soit pas livré. La façon dont vous la traitez dépend donc des conséquences de l'erreur et de ce que vous faites avec les adresses e-mail à ce moment-là (compilation d'une liste d'adresses uniques, envoi d'un e-mail, etc.).
Peter Bagnall du
11
Quelqu'un connaît-il une liste de produits de messagerie qui (a) rejette un [email protected] lorsque l'utilisateur [email protected] est valide, ou (b) permet la création de deux boîtes aux lettres distinctes: John .Doe @ company.com et [email protected]?
MSC
51
Je travaille dans une grande entreprise et il y a une autre personne avec le même prénom et nom. J'ai découvert aujourd'hui que sa partie locale ne diffère de la mienne que par la capitalisation. Cela fonctionnait correctement, donc j'ai été surpris de voir "aucun système de messagerie largement utilisé ne distingue les différentes adresses en fonction de la casse". Nous utilisons MS Exchange que j'appellerais «largement utilisé».
Matthew James Briggs
7
RFC 5321 2.4. Principes de syntaxe générale et modèle de transaction - Les implémentations SMTP DOIVENT veiller à préserver la casse des parties locales de boîte aux lettres. En particulier, pour certains hôtes, l'utilisateur "smith" est différent de l'utilisateur "Smith". Les domaines de boîtes aux lettres suivent les règles DNS normales et ne sont donc pas sensibles à la casse.
Adam111p
43

Je sais que c'est une vieille question, mais je veux juste commenter ici: dans la mesure où les adresses e-mail sont sensibles à la casse, la plupart des utilisateurs seraient "très imprudents" pour utiliser activement une adresse e-mail nécessitant des majuscules. Ils cesseraient bientôt d'utiliser l'adresse car il leur manquerait beaucoup de courrier. (À moins qu'ils n'aient une raison précise de compliquer les choses et qu'ils n'attendent du courrier que de la part d'expéditeurs spécifiques qu'ils connaissent.)

C'est parce qu'il existe des humains imparfaits ainsi que des logiciels imparfaits, (Surprise!) Qui supposera que tous les e-mails sont en minuscules, et pour cette raison, ces humains et ces logiciels enverront des messages en utilisant une "version inférieure" de l'adresse, quelle que soit la façon dont ils ont été fournis. pour eux. Si le destinataire n'est pas en mesure de recevoir de tels messages, il ne tardera pas à remarquer qu'il manque beaucoup et à passer à une adresse e-mail en minuscules uniquement, ou à configurer son serveur pour qu'il ne respecte pas la casse.

PaulOTron2000
la source
14
Il s'agit d'une application perspicace de la loi de Postel en.wikipedia.org/wiki/Robustness_principle . Il reste faux d'écrire un logiciel qui suppose que les parties locales des adresses e-mail ne respectent pas la casse, mais oui, étant donné qu'il existe de nombreux logiciels incorrects, il est également moins que robuste d'exiger la casse si vous êtes celui qui accepte le courrier .
zigg
1
L'une des choses qui me frustrent le plus, ce sont les sites qui m'obligent à écrire mon e-mail en minuscules. Je viens de lancer un commentaire en colère à Twitch.tv à propos de cette chose en ce qui concerne leur site de support. Ils vous empêchent même de saisir des majuscules sur leur site. Donc, même si je sais que mon serveur de messagerie les traite comme ne respectant pas la casse, et je sais que le RFC indique qu'il est sensible à la casse, les sites ne doivent JAMAIS faire d'hypothèses dans un sens ou dans l'autre et doivent simplement passer par ce que l'utilisateur entre. HOMME c'est tellement ennuyeux !!!
Mark A. Donohoe
Personnellement, lorsque je tape mon e-mail quelque part, je préfère utiliser la casse mixte juste pour qu'elle soit plus lisible. Par exemple: [email protected] (Pas ma vraie adresse.) Je le fais même si je reçois l'e-mail sans majuscules.
PaulOTron2000
En tant qu'auteur de logiciels, cependant, vous préféreriez que votre service soit l'un des rares à faire les choses correctement pour cette personne avec un courrier électronique sensible à la casse.
Klesun Il y a
31

Bien en retard à ce poste, mais j'ai quelque chose de légèrement différent à dire ...

>> "Are email addresses case sensitive?"

Eh bien, "ça dépend ..." (TM)

Certaines organisations pensent en fait que c'est une bonne idée et leurs serveurs de messagerie imposent une sensibilité à la casse.

Donc, pour ces endroits fous, "Oui, les e-mails sont sensibles à la casse."

Remarque: ce n'est pas parce qu'une spécification dit que vous pouvez faire quelque chose que c'est une bonne idée de le faire.

Le principe de KISS suggère que nos systèmes utilisent des e-mails insensibles à la casse.

Alors que le principe de robustesse suggère que nous acceptons les e-mails sensibles à la casse.

Solution:

  • Stockez vos e-mails en respectant la casse
  • Envoyer des e-mails en respectant la casse
  • Effectuer des recherches internes avec insensibilité à la casse

Cela signifierait que si cet e-mail existe déjà: [email protected]

... et un autre utilisateur arrive et souhaite utiliser cet e-mail: [email protected]

... que notre logique de recherche insensible à la casse renvoie un message d'erreur "Cet e-mail existe déjà".

Maintenant, vous avez une décision à prendre: cette solution est-elle adéquate dans votre cas?

Sinon, vous pouvez facturer des frais de commodité aux clients qui demandent une assistance pour leurs e-mails sensibles à la casse et implémenter une logique personnalisée qui autorise [email protected] dans votre système, même si [email protected] existe déjà.

Dans ce cas, votre logique de recherche / validation de courrier électronique pourrait ressembler à quelque chose de ce pseudocode:

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 + '"
}

De cette façon, vous appliquez principalement l'insensibilité à la casse, mais vous permettez aux clients de payer pour cette assistance s'ils utilisent des systèmes de messagerie qui prennent en charge de telles absurdités.

ps ILIKE est un mot clé PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html

l3x
la source
8
LIKE / ILIKE pour une correspondance exacte est une idée terrible. Imaginez un e-mail contenant %ou plus probablement_
ThiefMaster
18
Vos points sont super! Mais l'injection sql dans votre exemple le ruine :(
epelc
6
@epelc CECI. Je ne peux pas être plus d'accord. Ce type de construction de requête ne doit être écrit nulle part, même si ce n'est qu'un exemple.
xDaizu
1
@ l3x, bien que je ne sois pas aussi fermement contre l'exemple de code ci-dessus que les autres, en particulier parce que vous l'avez appelé pseudocode et à des fins d'illustration uniquement, peut-être que tous les commentaires ci-dessus pourraient être résolus en remplaçant vos query = ...lignes par des query = // Insert case-sensitive/insensitive search herecommentaires simples car cela éloigne la conversation du sujet d'injection SQL et se concentre sur ce que vous essayez de montrer. En d'autres termes, gardez-le sur la logique, pas sur la mise en œuvre. Cela fera taire les critiques.
Mark A. Donohoe
10

Normes ouvertes IETF RFC 5321 2.4. Principes de syntaxe générale et modèle de transaction

Les implémentations SMTP DOIVENT prendre soin de préserver le cas des parties locales de boîte aux lettres. En particulier, pour certains hôtes, l'utilisateur "smith" est différent de l'utilisateur "Smith".

Les domaines de boîtes aux lettres suivent les règles DNS normales et ne sont donc pas sensibles à la casse

Adam111p
la source
3

Par @ l3x, cela dépend.

Il existe clairement deux ensembles de situations générales où la bonne réponse peut être différente, ainsi qu'une troisième qui n'est pas aussi générale:

a) Vous êtes un utilisateur qui envoie des mails privés :

Très peu de systèmes de messagerie modernes implémentent la sensibilité à la casse, vous pouvez donc probablement ignorer la casse et choisir la casse que vous souhaitez utiliser. Il n'y a aucune garantie que tous vos courriers seront livrés - mais si peu de courriers seraient affectés négativement que vous ne devriez pas vous en soucier.

b) Vous développez un logiciel de messagerie :

Voir l'extrait RFC5321 2.4 en bas.

Lorsque vous développez un logiciel de messagerie, vous souhaitez être compatible RFC. Vous pouvez rendre les adresses e-mail de vos propres utilisateurs insensibles à la casse si vous le souhaitez (et vous devriez probablement). Mais pour être conforme à la RFC, vous DEVEZ traiter les adresses externes comme sensibles à la casse .

c) Gestion des listes d'adresses e-mail appartenant à l'entreprise en tant qu'employé :

Il est possible que le même destinataire de l'e-mail soit ajouté à une liste plus d'une fois - mais en utilisant une casse différente. Dans cette situation, bien que les adresses soient techniquement différentes, un destinataire peut recevoir des e-mails en double. La façon dont vous traitez cette situation est similaire à la situation a) dans la mesure où vous pouvez probablement les traiter comme des doublons et supprimer une entrée en double. Il est toutefois préférable de les traiter comme des cas particuliers en envoyant un courrier de "rappel" aux deux adresses pour leur demander s’il s’agit de doublons et, dans l’affirmative, quelle adresse e-mail le destinataire préférerait utiliser.

D'un point de vue juridique, si vous supprimez un doublon sans accusé de réception / autorisation des deux adresses, vous pouvez être tenu responsable de la fuite d'informations privées / authentification vers une adresse non autorisée simplement parce que deux destinataires réellement distincts ont la même adresse avec des cas différents .

Extrait de RFC5321 2.4:

La partie locale d'une boîte aux lettres DOIT ÊTRE traitée comme sensible à la casse. Par conséquent, les implémentations SMTP DOIVENT prendre soin de préserver la casse des parties locales de boîte aux lettres. En particulier, pour certains hôtes, l'utilisateur "smith" est différent de l'utilisateur "Smith". Cependant, l'exploitation de la casse des parties locales de boîte aux lettres empêche l'interopérabilité et est déconseillée.

zaTricky
la source