Является ли root @ [127.1] синтаксически действительным адресом электронной почты? - PullRequest
5 голосов
/ 01 апреля 2011

Является ли root@[127.1] синтаксически действительным адресом электронной почты?

Почему? Почему нет?

Ответы [ 5 ]

16 голосов
/ 01 апреля 2011

Вам необходимо проверить RFC 5322 , раздел 3.4.1.

Данная спецификация является пересмотренный Запрос на комментарии (RFC) 2822, который сам по себе заменил Запрос комментариев (RFC) 822, «Стандарт для формата ARPA» Интернет текстовые сообщения ", обновляя его, чтобы отразить текущую практику и включение дополнительных изменений, которые были указаны в других RFC.

Я управляю вашим адресом электронной почты, хотя http://isemail.info/, который дал следующую информацию:

Общий результат: : Адрес действителен только в соответствии с широким определением RFC 5322. В противном случае он недействителен.

Конкретный диагноз: : Литерал домена не является действительным литералом адреса RFC 5321

Вот соответствующий отрывок из RFC по электронной почте:

domain-literal = [CFWS] "[" * ([FWS] dtext) [FWS] "]" [CFWS]

(RFC 5322, раздел 3.4.1)

7 голосов
/ 12 апреля 2011

Это зависит от того, имеете ли вы в виду адреса в заголовке (RFC 5322) или адреса конверта (RFC 5321), а в последнем случае - <>, все между <> (т. Е. Исходный маршрут) или простоПочтовый ящик.

Это действительно в соответствии с RFC 5322, но RFC 5322 позволяет загружать забавных вещей, таких как комментарии! и единороги! и торт! и пони! .Почти возможно проанализировать их, используя "регулярные" выражения Perl: Mail :: RFC822 :: Address .

Это синтаксически неверно согласно RFC 5321Раздел 4.1.3 , поскольку грамматика допускает только адресные литералы формы 1.2.3.4 или с префиксом формы "standard-tag:" (например, [IPv6:::1]).Я предположил, что вы имели в виду «Почтовый ящик», то есть все между <>, но не включая исходный маршрут.

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

(Кроме того, есть RFC 5336, он же "UTF8SMTP". Яне знаю никого, кто этим пользуется.)

3 голосов
/ 01 апреля 2011

Нет, RFC2822 позволяет использовать IP-адреса в качестве домена, но вы должны использовать действительный IP-адрес.

Ваш пример должен быть root@[127.0.0.1].

2 голосов
/ 01 апреля 2011

Согласно RFC-822 , как вы упомянули в тегах, да, это синтаксически допустимо , потому что грамматика позволяет это. Вот соответствующие правила:

 addr-spec   =  local-part "@" domain        ; global address    

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

 sub-domain  =  domain-ref / domain-literal

 domain-literal =  "[" *(dtext / quoted-pair) "]"

 dtext       =  <any CHAR excluding "[",     ; => may be folded
                 "]", "\" & CR, & including
                 linear-white-space>
0 голосов
/ 11 апреля 2011

Нет,

Срок действия электронной почты имеет несколько широких определений, если разделить адрес на два раздела: локальный (до знака @) и домен (после знака @). Локальная часть может быть буквенно-цифровой со следующими специальными символами ‘.’, ‘-’ и ‘_’, локальная часть не может содержать непрерывные периоды.

Доменная часть должна соответствовать определению имени хоста или IP-адреса в квадратных скобках.

Поскольку ваш пример не соответствует требованиям для действительного имени хоста (foo.bar) и не содержит действительного IP-адреса, заключенного в квадратные скобки, он не является действительным адресом электронной почты.

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

...