Чи чутливі до регістру адреси електронної пошти?


305

Я читав, що стандартна перша частина електронної пошти відрізняється від регістру, однак я намагалася надіслати електронну пошту name@example.com, Name@example.comі NAME@example.com- вона надходить у кожному випадку.

Як поштові сервери обробляють імена користувачів? Чи можна пропустити справу, і це повідомлення не буде доставлено? Чи справді дуже важливо використовувати саме таку літеру, як це було написано під час реєстрації при введенні вашої електронної адреси?


Відповіді:


366

З RFC 5321, розділ 2.3.11 :

Стандартний режим іменування поштової скриньки визначається як "local-part @ domain"; сучасне використання дозволяє набагато ширший набір програм, ніж прості "імена користувачів". Отже, і через довгу історію проблем, коли проміжні хости намагалися оптимізувати транспорт, модифікуючи їх, локальна частина ОБОВ'ЯЗКОВО тлумачиться та призначається семантикою лише хостом, вказаним у доменній частині адреси.

Так що так, частина перед "@" може бути чутливою до регістру, оскільки вона повністю контролюється хост-системою. Однак на практиці жодна широко використовувана поштова система не розрізняє різні адреси залежно від регістру.

Однак частина знаку @ є доменом і згідно з RFC 1035 , розділ 3.1,

"Сервери імен та розв'язувачі повинні порівнювати [домени] у нечутливому до регістру порядку"

Коротше кажучи, ви можете безпечно ставитися до адрес електронної пошти як до чутливих до регістру.


81
"Коротше кажучи, ви можете безпечно ставитися до адрес електронної пошти як до чутливих до регістру". Я б сказав, що це сильніше: "Ви не безпечні для того, щоб поводитись електронними адресами як з урахуванням регістру", особливо під час перевірки дублікатів у базі даних користувачів тощо
Geert-Jan

61
Я б не погодився з висновком. Якщо ви шукаєте дублікати в базі даних - так, невідчутне значення регістру - це, мабуть, найкращий спосіб, але я бачив код, коли адреса електронної пошти перетворюється в малі регістри перед відправкою. Це не дуже гарна ідея, оскільки є невеликий шанс, що її не доставлять. Отже, як ви ставитесь до цього, залежить від того, які наслідки помилки та що ви робите з адресами електронної пошти на той час (складання списку унікальних адрес, надсилання електронного листа тощо).
Пітер Баньялл

10
Хтось знає про список поштових продуктів, які (а) відхилять John.Doe@company.com, коли користувач john.doe@company.com дійсний, або (b) дозволить створити два різних поштових скриньки: Джон .Doe @ company.com та john.doe@company.com?
MSC

51
Я працюю у великій компанії і є ще одна людина з таким же ім’ям та прізвищем. Я сьогодні виявив, що його локальна частина відрізняється від моєї лише капіталізацією. Це працює належним чином, тому я був здивований, побачивши, що "жодна широко використовувана поштова система не розрізняє різні адреси залежно від випадку". Ми використовуємо MS Exchange, який я б назвав "широко використовуваним".
Меттью Джеймс Бріггс

7
RFC 5321 2.4. Загальні принципи синтаксису та модель транзакцій - реалізація SMTP ПОВИНЕН подбати про збереження випадку локальних частин поштової скриньки. Зокрема, для деяких хостів користувач "Сміт" відрізняється від користувача "Сміт". Домени поштової скриньки відповідають нормальним правилам DNS і, отже, не враховують регістри.
Adam111p

43

Я знаю, що це старе питання, але я просто хочу тут прокоментувати: У будь-якій мірі адреси електронної пошти є чутливими до регістру, більшість користувачів буде "дуже нерозумно" активно використовувати адресу електронної пошти, яка вимагає великих літер. Незабаром вони перестануть користуватися адресою, оскільки їм не вистачає багато пошти. (Якщо у них немає конкретних причин ускладнити справи, і вони очікують пошти лише від конкретних відправників, яких вони знають.)

Це тому, що недосконалі люди, а також недосконале програмне забезпечення існують (сюрприз!), Який передбачає, що вся електронна пошта є малі, і з цієї причини ці люди та програмне забезпечення надсилатимуть повідомлення за допомогою "нижньої версії" адреси незалежно від того, як це було надано їм. Якщо одержувач не в змозі отримувати подібні повідомлення, це не задовго до того, як вони помітять, що їх багато не вистачає, і переключиться на електронну адресу, що містить лише малі регістри, або налаштуйте їх на сервер, що не враховує регістри.


14
Це проникливе застосування закону Postel en.wikipedia.org/wiki/Robustness_principle . Залишається неправильним писати програмне забезпечення, яке передбачає, що локальні частини електронної адреси не залежать від регістру, але так, враховуючи, що там є багато неправильного програмного забезпечення, також менш ніж надійне вимагати чутливості до справ, якщо ви приймаєте пошту. .
zigg

1
Однією з речей, які мене найбільше засмучують, є те, що сайти змушують мене писати електронний лист у малих регістрах. Щойно випустив гнівний коментар Twitch.tv про цю саму річ щодо свого веб-сайту підтримки. Вони блокують вас навіть увійти до верхнього регістру на їхньому сайті. Тож як я знаю, що мій сервер електронної пошти розглядає їх як нечутливі до регістру, і я знаю, що RFC стверджує, що це чутливе до регістру, сайти НІКОЛИ не повинні робити жодних припущень і не повинні просто проходити через те, що вводить користувач. ЧОЛОВА, яка так дратує !!!
Марк А. Донохое

Особисто, коли я кудись ввожу електронну пошту, я вважаю за краще використовувати змішаний регістр, щоб він був більш розбірливим. Наприклад: JamesTKirk@domain.com (Не моя реальна адреса.) Я це роблю, навіть якщо отримую електронний лист без великих літер.
PaulOTron2000

31

Шкільно пізно до цієї публікації, але у мене є щось дещо інше сказати ...

>> "Are email addresses case sensitive?"

Ну, "Це залежить ..." (TM)

Деякі організації насправді вважають, що це гарна ідея, і їх сервери електронної пошти застосовують чутливість до справ.

Отже, для цих божевільних місць "Так, електронні листи залежать від регістру".

Примітка. Те, що специфікація говорить, що ви можете щось зробити, не означає, що це добре зробити.

Принцип KISS передбачає, що наші системи використовують нечутливі до регістру електронні листи.

Тоді як принцип надійності пропонує нам приймати електронні листи з урахуванням регістру.

Рішення:

  • Зберігайте електронні листи з урахуванням регістру
  • Надсилайте електронні листи з урахуванням регістру
  • Виконайте внутрішній пошук із нечутливістю до справи

Це означає, що якщо цей електронний лист вже існує: user@x.com

... і інший користувач приходить і хоче використовувати цей електронний лист: USER@x.com

... що наша нечутлива логіка пошуку поверне повідомлення про помилку "Цей електронний лист вже існує".

Тепер ви маєте прийняти рішення: чи адекватне це рішення у вашому випадку?

Якщо ні, то ви можете стягнути плату за зручність з тих клієнтів, які вимагають підтримки своїх електронних листів, що реагують на регістри, та впроваджують власну логіку, яка дозволяє USER@x.com у вашу систему, навіть якщо user@x.com вже існує.

У такому випадку логіка пошуку / перевірки електронної пошти може виглядати приблизно як цей псевдокод:

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

Таким чином, ви здебільшого застосовуєте нечутливість до справ, але дозволяєте клієнтам платити за цю підтримку, якщо вони використовують системи електронної пошти, які підтримують таку нісенітницю.

ps ILIKE - це ключове слово PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html


8
ПОДОБАЙТЕ / ІЛІКЕ для точної відповідності - жахлива ідея. Уявіть собі електронний лист, який містить %або ймовірніше_
ThiefMaster

17
Ваші бали чудові! Але введення в sql у вашому прикладі
розорить

6
@epelc ЦЕ. Неможливо погодитись більше. Такого типу запитів не слід писати ніде, навіть якщо це лише приклад.
xDaizu

1
@ l3x, хоча я не настільки рішуче проти наведеного вище прикладу коду, як інші, а саме тому, що ви називали це псевдокодом, і це лише для ілюстративних цілей, можливо, всі вищезазначені коментарі можна було б вирішити, замінивши query = ...рядки на прості query = // Insert case-sensitive/insensitive search hereкоментарі, як це дозволяє утримувати розмову від теми інжекцій SQL і фокусується на тому, що ви намагаєтесь показати. Іншими словами, тримайте це за логікою, а не за реалізацією. Це замовчить критиків.
Марк А. Донохое

9

RFC 5321 2.4. Загальні синтаксичні принципи та модель транзакцій

Реалізації SMTP ПОВИНЕН подбати про збереження випадку локальних частин поштової скриньки. Зокрема, для деяких хостів користувач "Сміт" відрізняється від користувача "Сміт".

Домени поштової скриньки відповідають нормальним правилам DNS і, отже, не враховують регістри


3

За @ l3x, це залежить.

Очевидно є два набори загальних ситуацій, коли правильна відповідь може бути різною, а також третя, яка не є такою загальною:

a) Ви користувач надсилає приватні листи :

Дуже небагато сучасних систем електронної пошти застосовують чутливість до справ, тому вам, мабуть, добре проігнорувати регістр та вибрати будь-який випадок, який ви хочете використовувати. Немає гарантії, що всі ваші листи будуть доставлені - але так мало поштових повідомлень буде негативно позначатися на тому, що ви не повинні турбуватися про це.

б) Ви розробляєте поштове програмне забезпечення :

Див. RFC5321 2.4 уривок внизу.

Коли ви розробляєте поштове програмне забезпечення, ви хочете відповідати RFC. Якщо ви хочете (і, мабуть, вам це потрібно), ви можете зробити електронні адреси власних користувачів нечутливими. Але для того, щоб відповідати RFC, ви ОБОВ'ЯЗКОВО ставитися до зовнішніх адрес як до регістру .

c) Управління списками електронних адрес, що належать бізнесу, як працівник :

Можливо, що той самий одержувач електронної пошти додається до списку не один раз, але, використовуючи інший регістр. У цій ситуації, хоча адреси технічно відрізняються, це може призвести до отримання одержувачів дублікатів електронної пошти. Те, як ви ставитесь до цієї ситуації, схоже на ситуацію а) тим, що вам, ймовірно, добре трактувати їх як дублікати та видаляти дублікат. Однак краще ставитися до цих випадків як до особливих випадків, надіславши повідомлення "нагадування" на обидві адреси, щоб запитати, чи є вони дублікатами один одного, і якщо так, то яку електронну адресу одержувач вважає за краще використовувати.

З юридичної точки зору, якщо ви видалите дублікат без підтвердження / дозволу з обох адрес, ви можете нести відповідальність за витік приватної інформації / автентифікацію на несанкціоновану адресу просто тому, що два фактично окремих одержувача мають однакову адресу в різних випадках .

Витяг з RFC5321 2.4:

Локальна частина поштової скриньки ОБОВ'ЯЗКОВО розглядається як регістр. Тому реалізація SMTP ПОВИНЕН подбати про збереження випадку локальної частини поштової скриньки. Зокрема, для деяких хостів користувач "Сміт" відрізняється від користувача "Сміт". Однак використання чутливості до регістру місцевих частин поштової скриньки перешкоджає сумісності і не перешкоджає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.