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

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

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

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

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

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

7 ответов


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

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

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

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

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

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

регулярное выражение для проверки

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

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


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

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


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

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

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


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

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

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

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


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


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

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


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

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