Разрешено ли адресам электронной почты содержать не буквенно-цифровые символы? - программирование
Подтвердить что ты не робот

Разрешено ли адресам электронной почты содержать не буквенно-цифровые символы?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

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

Я живу в Аргентине, и здесь разрешены электронные письма, такие как ñoñó[email protected]

Ответ 3

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

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

... и т.д., в некоторой степени.

Ответ 4

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

В противном случае вы не сможете поймать гораздо более распространенный случай случайных опечаток, которые остаются в пределах любого набора символов, который вы разрабатываете. (Quick: is [email protected] - действительный адрес для меня на вашем сайте или нет?) Он также избегает ненужного и безвозмездного отчуждения любых пользователей, когда вы сообщаете им, что их совершенно правильный и правильный адрес неверен. Вы все еще можете не обрабатывать некоторые адреса (это необходимо отчуждение), так как другие ответы говорят: обработка адреса электронной почты не является тривиальной; но что-то им нужно выяснить, хотят ли они предоставить вам адрес электронной почты!

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

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

Ответ 5

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

Ответ 6

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

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