Метка электронной почты против локальной части и дефисов

Я читал RFC, сводки, википедию и т. Д. Я очень запутался в отношении локальных частей и ярлыков. Мне кажется, что локальная часть до @. Это кажется простым. Метка - это любая часть домена, разделенная точкой. Но мне кажется, что в некоторых местах местная часть также называется лейблом. И это очень запутанно в контексте того, где разрешены дефисы. Так что конкретно это за ярлык?

И с этим, какой из них является действительным адресом электронной почты (если есть)?

-bobross@painting.com
bobross-@painting.com
bobross@-painting.com
bobross@painting-.com

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

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

1 ответ

Решение

Из rfc5321, раздел 2.3.5:

A domain name (or often just a "domain") consists of one or more
components, separated by dots if more than one appears.  In the case
of a top-level domain used by itself in an email address, a single
string is used without any dots.  This makes the requirement,
described in more detail below, that only fully-qualified domain
names appear in SMTP transactions on the public Internet,
particularly important where top-level domains are involved.  These
components ("labels" in DNS terminology, RFC 1035 [2]) are restricted
for SMTP purposes to consist of a sequence of letters, digits, and
hyphens drawn from the ASCII character set [6].  Domain names are
used as names of hosts and of other entities in the domain name
hierarchy.  For example, a domain may refer to an alias (label of a
CNAME RR) or the label of Mail eXchanger records to be used to
deliver mail instead of representing a host name.  See RFC 1035 [2]
and Section 5 of this specification.

Другими словами, область abc.def.xyz состоит из 3-х компонентов (так называемые этикетки): abc, def, а также xyz, Каждый из этих ярлыков может содержать только буквы, цифры и дефисы. Для более конкретного определения мы должны проверить грамматику ABNF в разделе Синтаксис аргумента команды, потому что нас действительно волнует синтаксис аргументов MAIL FROM а также RCPT TO Команды (также известные как токены "email address").

"Адрес электронной почты" на самом деле называется Mailbox в спецификации SMTP:

Mailbox        = Local-part "@" ( Domain / address-literal )

Теперь, чтобы посмотреть на определение Local-part маркер:

Local-part     = Dot-string / Quoted-string
               ; MAY be case-sensitive


Dot-string     = Atom *("."  Atom)

Atom           = 1*atext

Чтобы получить определение atextнам нужно взглянуть на формат интернет-сообщения. В частности, нам нужно взглянуть на раздел 3.2.3:

atext           =   ALPHA / DIGIT /    ; Printable US-ASCII
                    "!" / "#" /        ;  characters not including
                    "$" / "%" /        ;  specials.  Used for atoms.
                    "&" / "'" /
                    "*" / "+" /
                    "-" / "/" /
                    "=" / "?" /
                    "^" / "_" /
                    "`" / "{" /
                    "|" / "}" /
                    "~"

(Примечание: я опустил определение Quoted-string потому что это не имеет отношения к вашему вопросу.)

Теперь давайте проверим определение Domain:

Domain         = sub-domain *("." sub-domain)

sub-domain     = Let-dig [Ldh-str]

Let-dig        = ALPHA / DIGIT

Ldh-str        = *( ALPHA / DIGIT / "-" ) Let-dig

Здесь мы видим, что ярлык - это то же самое, что sub-domain токен, но здесь мы также видим, что ярлыки (иначе sub-domainх) из Domain не может начинаться или заканчиваться дефисом.

Мы также можем видеть, что sub-domain токен на самом деле является подмножеством допустимых символов в Atom и поэтому символы разрешены в каждом компоненте Local-part не совпадают с разрешенными в каждом компоненте Domain,

Чтобы ответить на другие ваши вопросы:

И с этим, какой из них является действительным адресом электронной почты (если есть)?

-bobross@painting.com [VALID]
bobross-@painting.com [VALID]
bobross@-painting.com [INVALID]
bobross@painting-.com [INVALID]

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

Давайте использовать термин sub-domain чтобы сделать вещи менее запутанными.

Да, это правильно.

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

Ну, в соответствии с грамматикой ABNF rfc5322, Local-part может начинаться и заканчиваться дефисом.

Другие вопросы по тегам