Разрешено ли содержать адреса электронной почты не буквенно-цифровых символов? - PullRequest
58 голосов
/ 02 октября 2010

Я создаю сайт, используя Django.Веб-сайт может иметь значительное количество пользователей из неанглоязычных стран.

Я просто хочу знать, существуют ли какие-либо технические ограничения на типы символов, которые может содержать адрес электронной почты.

Разрешено ли использовать только адреса электронной почты, состоящие из букв английского алфавита, цифр, _, @ и .?

Разрешено ли содержать неанглийские алфавиты, такие как é или ü?

Разрешено ли им содержать китайские, японские или другие символы Юникода?

Ответы [ 7 ]

40 голосов
/ 19 мая 2016

Адрес электронной почты состоит из двух частей local до @ и domain после.

Правила для этих частей различны:

Для local part вы можете использовать ASCII:

  • Латинские буквы A - Z a - z
  • цифры 0 - 9
  • специальные символы! # $% & '* + - / =? ^ _ `{|} ~
  • точка., что это не первая или последняя, ​​ине в последовательности
  • пробел и символы "(),:; <> @ [] допускаются с ограничениями (они допускаются только внутри строки в кавычках, обратной косой черты или двойной кавычки должна предшествовать обратная косая черта)
  • Плюс с 2012 года Вы можете использовать международные символы выше U+007F, кодированные как UTF-8 .

Domain part более ограничено:

  • латинские буквы A - Z a - z
  • цифры 0 - 9
  • дефис - то есть не первый илинаконец, допускается несколько дефисов в последовательности.

Regex для проверки

^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})

Надеюсь, это сэкономит вам время.

36 голосов
/ 02 октября 2010

Ну да. Прочитайте (по крайней мере) эту статью из Википедии.

Я живу в Аргентине, и здесь разрешены электронные письма, такие как ñoñó1234@server.com

17 голосов
/ 02 октября 2010

Разрешенный синтаксис в адресе электронной почты описан в RFC 3696 и довольно сложен.

Точное правило [для локальной части; часть перед '@'] состоит в том, что любой символ ASCII, включая управляющий символы могут появляться в кавычках или в строке в кавычках. При цитировании символ обратной косой черты используется для цитирования следующего символ
[...]
Без кавычек локальные части могут состоять из любой комбинации буквенные символы, цифры или любые специальные символы ! # $% & '* + - / =? ^ _ `. {| } ~
[...]
Любые символы или комбинации битов (в виде октетов) разрешены в DNS-имена. Тем не менее, есть предпочтительная форма, которая требуется большинство приложений ...

... и так далее, на некоторой глубине.

11 голосов
/ 02 октября 2010

Вместо того, чтобы беспокоиться о том, что адреса электронной почты могут и не могут содержать, о чем вы действительно не заботитесь, проверьте, может ли ваша установка отправлять им электронную почту или нет - это то, что вас действительно волнует!На самом деле это означает отправку подтверждающего электронного письма.

В противном случае вы не сможете обнаружить гораздо более частый случай случайных опечаток, которые остаются в пределах любого набора символов, который вы разработали.(Быстрый: является ли random@mydomain.com действительным адресом, который я могу использовать на вашем сайте, или нет?) Он также позволяет избежать ненужного и необоснованного отчуждения любых пользователей, когда вы говорите им, что их совершенно действительный и правильный адрес неверен.Вы все еще не сможете обработать некоторые адреса (это необходимо отчуждение), как говорят другие ответы: обработка адресов электронной почты не тривиальна;но это то, что им нужно выяснить, хотят ли они предоставить вам адрес электронной почты!

Все, что вам нужно проверить, - это то, что пользователь вводит какой-то текст перед @, какой-то текст после него, а адрес не 't возмутительно долго (скажем, 1000 символов).Если вы хотите выдать предупреждение («это похоже на проблему! Есть ли опечатка? Двойная проверка перед продолжением»), это нормально, но оно не должно блокировать процесс добавления адреса электронной почты.

Конечно, если вы не хотите когда-либо отправлять им электронные письма, просто берите все, что они вводят.Например, адрес может использоваться исключительно для Gravatar , но Gravatar в любом случае проверяет все адреса электронной почты.

5 голосов
/ 02 октября 2010

Существует возможность иметь адреса электронной почты не-ASCII, как показано в этом RFC: http://tools.ietf.org/html/rfc3490, но я думаю, что это не было установлено для всех стран, и, насколько я понимаю, будет использоваться только один код языка разрешено для каждой страны, и есть также способ превратить его в ASCII, но это не будет тривиальной проблемой.

2 голосов
/ 26 февраля 2013

Я встречал адреса электронной почты с одинарными кавычками, и нередко тоже. Мы отклоняем пробел (хотя, строго говоря, это разрешено), более чем один знак «@» и адресные строки короче, чем пять символов. Я полагаю, что это решает больше проблем, чем создает, и на протяжении десяти лет и нескольких сотен тысяч адресов он работал, чтобы отвергать множество мусорных адресов. Также есть триггер для отключения всех адресов электронной почты при вставке или обновлении.

При этом невозможно подтвердить электронную почту без обратной связи с владельцем, но, по крайней мере, мы можем отклонить данные, которые крайне подозрительны.

1 голос
/ 18 сентября 2018

Опираясь на @ Matas Vaitkevicius 'ответ: я исправил регулярное выражение в Python, чтобы оно соответствовало действительным адресам электронной почты, определенным на этой странице и эта страница из Википедии, используя этот удивительный веб-сайт regex101: https://regex101.com/r/uP2oL7/26

Надеюсь, это кому-нибудь поможет!:)

...