Czy adresy e-mail uwzględniają wielkość liter?

305

Czytałem, że przy standardowym pierwszej części e-mail jest wielkość liter, więc starałem się wysłać e-mail do [email protected], [email protected]i [email protected]- ma się w każdym przypadku.

Jak serwery pocztowe obsługują nazwy użytkowników? Czy można spóźnić się ze sprawą, a ta wiadomość nie zostanie dostarczona? Czy naprawdę bardzo ważne jest, aby używać dokładnie tej samej skrzynki na listy, jak napisano podczas rejestracji, podając swój adres e-mail?

Prześladowca
źródło
Powiązane pytanie - stackoverflow.com/questions/9013726/...
Luke Girvin

Odpowiedzi:

366

Z RFC 5321, sekcja 2.3.11 :

Standardowa konwencja nazewnictwa skrzynek pocztowych jest zdefiniowana jako „część lokalna @ domena”; współczesne użycie pozwala na znacznie szerszy zestaw aplikacji niż proste „nazwy użytkowników”. W związku z tym oraz z powodu długiej historii problemów, gdy hosty pośrednie próbowały zoptymalizować transport poprzez ich modyfikację, część lokalna MUSI być interpretowana i przypisywana semantyce tylko przez hosta określonego w części domeny pod adresem.

Tak więc w części przed „@” rozróżniana jest wielkość liter, ponieważ jest ona całkowicie pod kontrolą systemu hosta. W praktyce jednak żadne z powszechnie stosowanych systemów pocztowych nie rozróżnia różnych adresów na podstawie wielkości liter.

Część po znaku @ to jednak domena i zgodnie z RFC 1035 , sekcja 3.1,

„Serwery nazw i programy tłumaczące muszą porównywać [domeny] bez rozróżniania wielkości liter”

Krótko mówiąc, możesz bezpiecznie traktować adresy e-mail bez rozróżniania wielkości liter.

Mike E.
źródło
81
„Krótko mówiąc, możesz bezpiecznie traktować adresy e-mail bez rozróżniania wielkości liter”. Powiedziałbym mocniej: „nie możesz traktować adresów e-mail tak, aby rozróżniała wielkość liter”. Zwłaszcza podczas sprawdzania duplikatów w bazach danych użytkowników itp.
Geert-Jan
61
Nie zgodziłbym się z wnioskiem. Jeśli szukasz duplikatów w bazie danych - tak, dopasowanie bez rozróżniania wielkości liter jest prawdopodobnie najlepszym rozwiązaniem, ale widziałem kod, w którym adres e-mail jest konwertowany na małe litery przed wysłaniem. To nie jest dobry pomysł, ponieważ istnieje niewielka szansa, że ​​nie zostanie dostarczony. Zatem sposób, w jaki go traktujesz, zależy od konsekwencji błędu i tego, co robisz z adresami e-mail w tym czasie (zestawianie listy unikalnych adresów, wysyłanie wiadomości e-mail itp.).
Peter Bagnall,
10
Czy ktoś wie o liście produktów pocztowych, które (a) odrzucą adres [email protected], gdy użytkownik [email protected] jest ważny, lub (b) pozwoli na utworzenie dwóch różnych skrzynek pocztowych: John .Doe @ company.com i [email protected]?
MSC
51
Pracuję w dużej firmie i jest inna osoba o tym samym imieniu i nazwisku. Odkryłem dzisiaj, że jego lokalna część różni się od mojej tylko wielką literą. Działa to poprawnie, więc byłem zaskoczony, widząc, że „żaden z powszechnie używanych systemów pocztowych nie rozróżnia różnych adresów na podstawie wielkości liter”. Używamy MS Exchange, który nazwałbym „szeroko używanym”.
Matthew James Briggs
7
RFC 5321 2.4. Ogólne zasady składni i model transakcji - implementacje SMTP MUSZĄ zadbać o zachowanie przypadku lokalnych części skrzynki pocztowej. W szczególności w przypadku niektórych hostów użytkownik „kowal” różni się od użytkownika „Smith”. Domeny skrzynek pocztowych są zgodne z normalnymi regułami DNS i dlatego nie rozróżniają wielkości liter.
Adam111p
43

Wiem, że to stare pytanie, ale chcę tutaj skomentować: w jakimkolwiek stopniu w adresach e-mail rozróżniana jest wielkość liter, większość użytkowników byłaby „bardzo nierozsądna”, aby aktywnie używać adresu e-mail wymagającego wielkich liter. Wkrótce przestaną korzystać z tego adresu, ponieważ stracą dużo poczty. (Chyba że mają konkretny powód, aby utrudniać pracę i oczekują poczty tylko od określonych nadawców, których znają).

Wynika to z faktu, że istnieją niedoskonali ludzie, a także niedoskonałe oprogramowanie (Niespodzianka!), Które zakłada, że ​​wszystkie wiadomości e-mail są pisane małymi literami iz tego powodu ci ludzie i oprogramowanie będą wysyłać wiadomości przy użyciu „małej wersji” adresu, niezależnie od tego, w jaki sposób został podany do nich. Jeśli adresat nie będzie w stanie odbierać takich wiadomości, niedługo zauważy, że ich brakuje, i przełączy się na adres e-mail zawierający tylko małe litery lub skonfiguruje serwer tak, aby nie rozróżniał wielkości liter.

PaulOTron2000
źródło
14
Jest to wnikliwe stosowanie prawa Postela en.wikipedia.org/wiki/Robustness_principle . Pisanie oprogramowania, które zakłada, że ​​w lokalnych częściach adresów e-mail nie jest rozróżniana wielkość liter, jest błędem, ale tak, biorąc pod uwagę, że jest tam mnóstwo niewłaściwego oprogramowania, wymaganie rozróżniania wielkości liter w przypadku, gdy akceptujesz pocztę, jest również niezbyt solidne .
zigg
1
Najbardziej frustruje mnie to, że strony zmuszają mnie do pisania e-maili małymi literami. Właśnie wystrzeliłem zły komentarz do Twitch.tv na ten temat w odniesieniu do strony wsparcia. Blokują ci nawet wprowadzanie wielkich liter na swojej stronie. Tak więc, chociaż wiem, że mój serwer pocztowy traktuje je jako bez rozróżniania wielkości liter, i wiem, że w RFC rozróżniana jest wielkość liter, witryny NIGDY nie powinny przyjmować żadnych założeń w żaden sposób i powinny po prostu przejść przez to, co wchodzi użytkownik. MĘŻCZYZNA, która jest taka denerwująca !!!
Mark A. Donohoe
Osobiście, kiedy piszę gdzieś swój e-mail, wolę używać różnych liter, aby było bardziej czytelne. Na przykład: [email protected] (nie jest to mój prawdziwy adres). Robię to, mimo że otrzymuję wiadomość e-mail bez wielkich liter.
PaulOTron2000
31

O wiele za późno na ten post, ale mam coś nieco innego do powiedzenia ...

>> "Are email addresses case sensitive?"

Cóż, „To zależy ...” (TM)

Niektóre organizacje uważają, że to dobry pomysł, a ich serwery pocztowe wymuszają rozróżnianie wielkości liter.

W przypadku tych zwariowanych miejsc: „Tak, w wiadomościach e-mail rozróżniana jest wielkość liter”.

Uwaga: fakt, że specyfikacja mówi, że możesz coś zrobić, nie oznacza, że ​​warto to zrobić.

Zasada KISS sugeruje, że nasze systemy używają wiadomości e-mail bez rozróżniania wielkości liter.

Natomiast zasada solidności sugeruje, że akceptujemy wiadomości e-mail uwzględniające wielkość liter.

Rozwiązanie:

  • Przechowuj wiadomości e-mail z rozróżnianiem wielkości liter
  • Wysyłaj wiadomości e-mail z rozróżnianiem wielkości liter
  • Wykonuj wyszukiwania wewnętrzne bez rozróżniania wielkości liter

Oznaczałoby to, że jeśli ten adres e-mail już istnieje: uż[email protected]

... i pojawia się inny użytkownik, który chce użyć tego e-maila: [email protected]

... że nasza logika wyszukiwania bez rozróżniania wielkości liter zwróciłaby komunikat o błędzie „Ten e-mail już istnieje”.

Teraz musisz podjąć decyzję: czy to rozwiązanie jest odpowiednie w twoim przypadku?

Jeśli nie, możesz naliczyć opłatę za obsługę dla tych klientów, którzy wymagają wsparcia dla wiadomości e-mail uwzględniających wielkość liter i wdrożyć niestandardową logikę, która pozwala [email protected] w twoim systemie, nawet jeśli uż[email protected] już istnieje.

W takim przypadku logika wyszukiwania / sprawdzania poprawności wiadomości e-mail może wyglądać podobnie do tego pseudokodu:

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

W ten sposób wymuszasz niewrażliwość na wielkość liter, ale pozwalasz klientom płacić za to wsparcie, jeśli korzystają z systemów e-mail obsługujących takie bzdury.

ps ILIKE jest słowem kluczowym PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html

l3x
źródło
8
LIKE / ILIKE dla dokładnego dopasowania to okropny pomysł. Wyobraź sobie wiadomość e-mail zawierającą %lub bardziej prawdopodobne_
ThiefMaster
17
Twoje punkty są świetne! Ale zastrzyk sql w twoim przykładzie niszczy go :(
epelc
6
@epelc THIS. Nie mogę zgodzić się więcej. Tego rodzaju budowania zapytań nie należy nigdzie pisać, nawet jeśli jest to tylko przykład.
xDaizu,
1
@ l3x, chociaż nie jestem tak przeciwny powyższemu przykładowemu kodowi jak inne, szczególnie dlatego, że wywołałeś go jako pseudokod i ma on wyłącznie charakter ilustracyjny, być może wszystkie powyższe komentarze można rozwiązać, zastępując twoje query = ...wiersze proste query = // Insert case-sensitive/insensitive search herekomentarze, które utrzymują rozmowę z dala od tematu iniekcji SQL i koncentrują się na tym, co próbujesz pokazać. Innymi słowy, zachowaj logikę, a nie implementację. Uciszy krytyków.
Mark A. Donohoe
9

RFC 5321 2.4. Ogólne zasady składni i model transakcji

Wdrożenia SMTP MUSZĄ zadbać o zachowanie przypadku lokalnych części skrzynki pocztowej. W szczególności w przypadku niektórych hostów użytkownik „kowal” różni się od użytkownika „Smith”.

Domeny skrzynek pocztowych są zgodne z normalnymi regułami DNS i dlatego nie rozróżniają wielkości liter

Adam111p
źródło
3

Zależy to od @ l3x.

Istnieją oczywiście dwa zestawy ogólnych sytuacji, w których poprawna odpowiedź może być inna, wraz z trzecią, która nie jest tak ogólna:

a) Jesteś użytkownikiem wysyłającym prywatne wiadomości e-mail :

Bardzo niewiele nowoczesnych systemów poczty e-mail implementuje rozróżnianie wielkości liter, więc prawdopodobnie dobrze jest zignorować wielkość liter i wybrać dowolną wielkość liter. Nie ma gwarancji, że wszystkie twoje maile zostaną dostarczone - ale na tak niewielką liczbę negatywnie wpłynęłoby to, że nie powinieneś się tym martwić.

b) Tworzysz oprogramowanie pocztowe :

Zobacz fragment RFC5321 2.4 na dole.

Tworząc oprogramowanie pocztowe, chcesz być zgodny z RFC. Państwo może dokonać adresy e-mail nie uwzględnia wielkości liter swoich własnych użytkowników, jeśli chcesz (i prawdopodobnie powinien). Aby jednak zachować zgodność z RFC, MUSISZ traktować adresy zewnętrzne z rozróżnianiem wielkości liter .

c) Zarządzanie firmowymi listami adresów e-mail jako pracowników :

Możliwe jest, że ten sam adresat e-mail zostanie dodany do listy więcej niż jeden raz - ale w innym przypadku. W tej sytuacji, chociaż adresy są technicznie różne, może to spowodować, że odbiorca otrzyma zduplikowane wiadomości e-mail. Sposób, w jaki traktujesz tę sytuację, jest podobny do sytuacji a), ponieważ prawdopodobnie możesz traktować je jako duplikaty i usunąć zduplikowany wpis. Lepiej jednak traktować je jako przypadki szczególne, wysyłając wiadomość „przypominającą” na oba adresy, aby zapytać, czy są one duplikatami, a jeśli tak, to jakiego adresu e-mail odbiorca wolałby użyć.

Z prawnego punktu widzenia, jeśli usuniesz duplikat bez potwierdzenia / pozwolenia z obu adresów, możesz ponosić odpowiedzialność za wyciek prywatnych informacji / uwierzytelnienia na nieautoryzowany adres po prostu dlatego, że dwóch faktycznie oddzielnych odbiorców ma ten sam adres w różnych przypadkach .

Fragment z RFC5321 2.4:

Lokalna część skrzynki MUSI BYĆ traktowana jako rozróżniana wielkość liter. Dlatego implementacje SMTP MUSZĄ zadbać o zachowanie przypadku lokalnych części skrzynki pocztowej. W szczególności w przypadku niektórych hostów użytkownik „kowal” różni się od użytkownika „Smith”. Jednak wykorzystywanie rozróżniania wielkości liter w lokalnych częściach skrzynki pocztowej utrudnia interoperacyjność i jest odradzane.

zaTricky
źródło