Никогда не проверяйте e-mail адреса по стандартам RFC

adres-elektronoy-pochty-1-637x401.jpg Рэй Томлинс

Спустя четыре года, в 1972, Томлинс доработал созданную раннее службу. Создал для неё программную оболочку, имевшую подобие почтового клиента и наделил необходимыми функциями (сортировка писем, отправка файлов и т.д.). Примерно в это же время появился и современный стандарт адреса почты — символ «@» (собачка). Отныне он фигурировал во всех депешах — в адресах электронной почты отправителей и получателей.

adres-elektronoy-pochty-2-486x324.jpg ARPANET

В 1975, благодаря усилиям программиста Джона Виталла, почтовый клиент MSG получил новые усовершенствования. В нём улучшились алгоритмы сортировки входящих сообщений, появилась функция «автоматический ответ».

adres-elektronoy-pochty-3-487x391.jpg Первый прототипы сетевого взаимодействия ПК

Вот так и ознаменовалась новая эпоха, эра современных сетевых коммуникаций. Это потом уже, в 1976 году, королева Великобритании отправила первое сообщение по Сети, в 1994 в почтовых ящиках пользователей появился спам, а в 2000-ном вирус «I love you»…

Итак, что такое адрес электронной почты?

Это уникальная запись, соответствующая стандарту RFC 2822, которая идентифицирует почтовый ящик пользователя и сообщает онлайн-сервису, куда именно необходимо доставить сообщение и прикреплённые к нему файлы.

Давайте разберёмся, как выглядит и из чего состоит адрес ящика.

Его формат можно представить как совокупность трёх отдельных частей. Записывается так:@

adres-elektronoy-pochty-5-640x193.jpg

«Логин пользователя» — уникальное название вашего ящика, вы его указываете при регистрации. Как правило, в логине допускается использование английских букв, цифр и символа «_».

«@» — разделительный символ «at», или «собачка», неотъемлемый атрибут любого адреса. Он как бы указывает — кто и откуда. Например: ivan@mail.ru — ivan c mail.ru.

adres-elektronoy-pochty-4-633x446.jpg

— название почтового сервиса, на котором был зарегистрирован ваш почтовый ящик. Например, gmail.com, yandex.ru, mail.ru и т.д.

Электронный ящик и, соответственно, его адрес создаются непосредственно в онлайн-сервисах, его предоставляющих.

Алгоритм регистрации сводится к следующему (что нужно сделать):

1. Определитесь, какой почтовый сервис вы хотите использовать.

2. Откройте его официальный сайт — mail.ru, rambler.ru или др.

3. Перейдите на страничку с регистрационной формой (кнопка, ссылка с надписью «Регистрация», «Зарегистрироваться», «Создать почту»).

4. Укажите все необходимые данные: имя, дату рождения, номер мобильного и т.д. Придумайте логин для ящика и пароль для входа в него.

adres-elektronoy-pochty-6-640x391.jpgПримечание. Если затрудняетесь придумать логин почты, воспользуйтесь онлайн-генератором имён. Их в Сети предостаточно.adres-elektronoy-pochty-7-640x375.jpg

5. Отправьте заполненную форму на сервер службы (кнопка «Отправить»).

Если все данные были указаны правильно, вы сразу же получите доступ к своей почте.

Подробно о регистрации e-mail читайте здесь.

При регистрации в онлайн-играх, соцсетях и на других веб-ресурсах адрес ящика необходимо указывать в полном формате — @.

adres-elektronoy-pochty-8-640x439.jpg

Если вы авторизовываетесь в почтовом ящике, например, на таких сервисах, как Gmail, Mail.ru, можно в поле указать только логин — первый элемент адреса.

adres-elektronoy-pochty-9-640x443.jpg

А почта сама уже «сообразит», какой пользователь решил зайти в профиль и откроет ему доступ.

adres-elektronoy-pochty-10-640x464.jpg

Если вам нужно в реальном или виртуальном диалоге сообщить собеседнику адрес почты, вы можете представить её в полном формате или же сказать, например, «vasya12 на Gmail, или ivan2012 на mail.ru».

adres-elektronoy-pochty-11-586x380.jpg

Надёжных вам коммуникаций и комфортной переписки в Сети!

Читайте также:Вход в электронную почту от Рамблер

Видео по теме:

  • izm-adres-mailru.jpgКак поменять адрес электронной почты в Майле

uzn-adres-pochty.jpgКак узнать мой адрес электронной почтыotpr-pismo-mailr-ru.jpgКак отправить сообщение по электронной почте MailOriginal author: Allen Fair Множество сайтов требуют от пользователя ввода адреса электронной почты, и мы, как крутые и щепетильные разработчики, всегда стремимся проверять формат введенных адресов строго по стандартам RFC. Благодаря этому наши приложения и сайты проверяют формат e-mail корректно и не имеют проблем с юзабилити, а мы сладко спим, потому что уверены, что все работает как надо.Ага, как бы не так! Приведенные выше аргументы звучат круто и железобетонно, но проблема здесь заключается в том, что в адресе почты могут находиться совершенно бессмысленные вещи, и, на деле, проверка адресов по стандартам RFC может, наоборот, все жутко запутать. Почему так? Существует множество способов сформировать адрес почты, который будет одновременно и корректным и бредовым. Отчасти это происходит из-за того, что некоторые почтовые службы в целях обратной совместимости позволяют представлять адреса в форматах, которые давно устарели. Например это электронная почта существовавшая до появления DNS и до появления современного формата user@domain.tld: тогда использовались UUCP ”bang path” — адреса, которые представляли собой список всех узлов по маршруту ответственных за доставку.

Внутренности адреса почты

Адрес e-mail выглядит так:

mailbox@hostname 

Тут mailbox может быть локальным аккаунтом пользователя, аккаунтом роли или маршрутизато��ом автоматизированной системы такой, например, как список рассылки, а в качестве hostname может быть использован любой узел, если о нем известно DNS-серверу, к которому обращается почтовик при доставке. Кроме того, некоторые системы позволяют добавлять теги к адресу. Обычно это происходит в формате:

mailbox+tag@hostname 

где тег и разделитель (обычно это «+», но qmail использует «-» по-умолчанию, хотя может быть сконфигурирован и иначе) игнорируются при доставке. Обычно это используется для фильтрации почты по папкам и автоматизации, но может быть использовано и для разделения введенных адресов по получателям и выявления злоупотреблений персональными данными. Итак, в адресе в формате «mailbox@hostname», «mailbox» является пользовательским аккаунтом, приложением или аккаунтом системной роли, но может содержать и такие экстравагантные вещи, как информацию для дальнейшей маршрутизации или идентификаторы используемые для сортировки, автоматизации или отслеживания, а «hostname» — обычно доменное имя, но может являться и субдоменом, сервером, сервисом, ip-адресом или просто именем хоста.

Корректные имена ящика с точки зрения RFC

Специцификация одобряет довольно странные адреса, и было бы накладно поддерживать их все потому, что некоторые слишком сложны, и не слишком много людей обладают достаточными знаниями чтобы выделывать такие пируэты в нейминге. Поддержка таких адресов затруднит поддержку таких аккаунтов вашими сотрудниками, к тому же они почти никогда не используются в быту. Ящик может содержать пробелы. Насколько я помню, доинтернетовский AOL разрешал пробелы в «Imya Polzovatelya», которые использовались еще и как почтовые ящики с вырезанными оттуда пробелами: «imyapolzovatelya@aol.com», однако ж согласно RFC вы можете использовать двойные кавычки вокруг ящиков содержащих пробелы:

"Alan Turing"@example.com   <== Это корректно, но поддерживать не стоит 

Кстати говоря, по этой логике, ящик содержащий всего лишь пробел корректен:

" "@example.com <== Это корректно, но смотри выше 

А вот еще один корректный адрес, он создан из допустимых для адреса символов:

!#$%&'*+-/=?^_`{}|~@example.com   <== Корректный адрес вряд ли достойный поддержки 

Кстати, проверяйте апострофы, апострофы должны поддерживаться:

Miles.O'Brian@example.com  <== Стоит поддерживать 

Апострофы не должны закавычиваться или эскейпиться, но когда вы сохраняете такие адреса в базу или передаете еще куда-то, убедитесь, что всё чики-пуки. В Википедии есть еще куча примеров. Нужна ли полная совместимость с RFC? Вам выбирать, но я не советую — пробелы и нестандартные символы в адресе довольно необычная штука и чаще всего являются просто опечаткой. Крупные e-mail провайдеры не разрешают использовать это примерно по тем же причинам; таким образом обычно достаточно дозволять буквы, цифры, точки, подчеркивания, дефисы, апострофы и плюсы.

Регистрозависимые адреса

Согласно RFC уникальность адреса определяется его регистрозависимой уникальностью, однако 99,9% провайдеров считают иначе и не позволяют регистрировать VasyaPetrov@example.com, если vasyapetrov@example.com уже зарегистрирован. Считайте, что имя почтового ящика регистронезависимо:

ALLEN@example.com Allen@example.com allen@example.com

Небольшая кучка систем использует полную проверку регистра, позволяя лишь адрес Allen@example.com и отбрасывая входящую корреспондецию всех остальных АлЛеНоВ, однако это не работает на практике, поскольку пользователь не привык различать регистр в адресах почты. Должны ли вы тут сохранять совместимость с RFC? Конвертируя адреса в нижний регистр перед сохранением вы можете доставить проблем небольшому количеству пользователей (вы не сможете посылать им письма), но отослав миллионы e-mail я столкнулся с этим всего несколько раз. Конвертация в адреса в нижний регистр является неплохой идеей в плане нормализации данных, так как домен всегда регистронезависим и должен быть в нижнем регистре. Если же вы решите сохранять адрес так, как он введен, добавьте поле, в котором будет хранить каноническую версию.

Нестандартные символы

Gmail тут отличился: в то время как стандарт включает в себя точку как стандартный символ, Gmail не делает различий между адресами ящиков с точками и без. Эти адреса указывают на один и тот же почтовый ящик:

first.last@gmail.com firstlast@gmail.com f.i.r.s.t.l.a.s.t@gmail.com

Обратите внимание, что Google Apps позволяет использовать Gmail на любом домене. Основная проблема здесь заключается в поиске адреса в базе в том виде, в котором он был изначально введен, что может доставить немало геморроя как пользователю, так и службе поддержки, а также и программистам с тестировщиками. Тут то вам и пригодится вторая, канонiческая форма адреса, но об этом позже.

Расширенная форма названия ящиков с использованием тегов.

Как было сказано выше, большинство систем доставки электронной почты (MTA), включая sendmail, Postfix, qmail, Yahoo Plus и Gmail поддерживают расширенное название ящика. Это позволяет пользователю, добавляя тег, сортировать письма. Это может позволить мне насоздавать кучу аккаунтов на одном сайте или в приложении:

allen+one@example.com allen+two@example.com 

Но нужно ли вычищать теги из адреса ящика?НЕТ! Будьте дружелюбны к своим пользователям, и пользователи проникнутся верой, что вы не осуществите хищение и сбыт их персональных данных с целью наживы. Даже если вы пытаетесь запретить регистрацию дополнительных аккаунтов с существующим ящиком, представьте себе, насколько просто в наше время тупо зарегистрировать еще один ящик чтобы снова зарегистрироваться у вас — не сложнее создания алиаса или папки(но об алиасах, папках и тегах, наоборот, мало кто знает). Итак, еще раз. Создание второй, канонической, формы сохранения адреса в базе может неплохо прикрыть вашу за вас в случае неприятностей. Убедитесь, что вы ликвидировали из нее все теги, точки и т. д. и можете сравнивать с ней свежевведенные адреса.

Юникод и интернационализированные имена ящиков

Имена ящиков не поддерживают расширенные символы ASCII (8-bit) и символы Юникода. Это ограничение уходит своими корнями в спецификацию SMTP, во времена появления которого всего этого попросту не существовало; однако 8-битные значения, определенные локально, например из кодировок семейства ISO-8859-x, все-таки могут использоватьс��, но вы все равно никогда не узнаете, что же это за кодировка. Фактически, я видел 8-битные ящики только у спамеров. В конце концов, вы ведь храните ваши данные в UTF-8, так? Значит вы в любом случае не сможете перевести их обратно в ту локаль, которая была использована, если вы ее не знаете.

Доменные имена

У почтовых доменов те же самые ограничения как и в HTTP: они регистронезависимые, так что их следует нормализовывать в нижний регистр.

Поддомены

Некоторые адреса содержат ненужные поддомены: например, «email.msn.com» и «msn.com» являются одним и тем же почтовым доменом, кроме того, такие истории часто случаются в корпоративной среде (и это еще один хороший кандидат для каноникализации).

Интернационализированные домены (IDN)

IDN были созданы для того чтобы использовать местные символы Юникода в названиях доменов, кроме того, возможно создать домен и со специальными символами:

postmaster@→→→→→→→.ws 

этот классно описывает круговорот воды в природе. Как и HTTP, SMTP поддерживает лишь 7-битную кодировку, и для того чтобы справиться с этим несчастьем IDN конвертируются в Punycode, что позволяет имени домена конвертироваться в представление Юникод и обратно:

postmaster@xn--55gaaaaaa281gfaqg86dja792anqa.ws 

Очень жаль, но существует возможность фишинга при использовании IDN. Юникод содержит несколько разных экземпляров некоторых символов ASCII. Это позволяет злоумышленнику создать сайт, название которого выглядит точно также как и оригинал из-за того, что некоторые символы в названии совпадают внешне, но не внутренне. Это порождает несколько вопросов на которые следует ответить: Должны ли мы дозволять IDN-адреса? Можем ли мы обеспечить саппорт пользователей службой поддержки (откуда у саппорта, например, клавиатуры с китайскими иероглифами?) Должны ли мы сохранять их в Юникоде или Punycode? Если мы сохраняем каноничные адреса, то в какой кодировке это делать? Поддерживает ли вообще наш почтовик (MTA) IDN, и в какой форме он ждет адреса при отправке писем?

IP Address syntax

Использование IP-адресов допустимо:

allen@[127.0.0.1] allen@[IPv6:0:0:1] 

Однако такие адреса выглядят подозрительно, и вряд ли им стоит доверять.

Временные почтовые адреса

Существует множество сервисов, которые предоставляют пользователям временные почтовые адреса. Обычно это используется для анонимности или для того чтобы регистрироваться на недоверенных сайтах. Даже такие сервисы как Hotmail и Yahoo предоставляют алиасы, которые могут быть использованы примерно тем же способом, то есть уничтожены через некоторое время. Не существует единой техники выявле��ия таких адресов — в конце концов именно для этого они и предназначены. Они используют большущий набор доменных имен с постоянной ротацией для того чтобы быть на шаг впереди тех, кто пытается пресечь их деятельность.

Белый список используемых возможностей

Адреса электронной почты могут быть чудовищно сложными, но, навскидку, 99,99% (а может, и больше) придерживаются простых принципов, а остальные слишком утомительно поддерживать. Итак, вам вероятно следует воздержаться от поддержки адреса, если он содержит:

  • Зависимость от регистра
  • Пробелы
  • Кавычки или Эскейп-символы
  • Специальные символы кроме '._+-
  • Айпишники в поле домена
  • IDN

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

  • Приведен в нижний регистр
  • Быть без тегов
  • Транскодирован из Юникода в ASCII
  • Без дублирующихся поддоменов

Несмотря на то, что этот совет может показаться слишком радикальным, это все равно лучше, чем слепо подчиняться стандартам. Как знать, может когда-нибудь такая упрощенная нотация станет новым стандартом?351121.8k 351

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

Название ящика у каждого свое – единственное и неповторимое. Поменять его нельзя, можно только зарегистрировать новый ящик с новым именем.

Это как, например, номер мобильного телефона. Какой уж назначили, такой и есть. Поменять его нельзя, можно только получить новый.

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

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

3.png

Подытожим:

Адрес электронной почты – это уникальное название ящика в интернете. В его состав обязательно входит символ @. Назначается адрес при регистрации почты.

Получается следующее. Когда мы создавали себе почту в интернете, нам был назначен адрес для нее. Теперь на него и приходят письма.

Какой мой адрес

Начнем с того, как формируются адреса электронных ящиков. Когда человек хочет завести в интернете свою личную почту, он идет на какой-нибудь почтовый сайт (Яндекс, Gmail, Mail, Рамблер или другой).

4.png

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

Кстати, обо всем этом я подробно рассказывал в уроке «Почта в интернете».

Вот этот самый логин – это и есть ключевая часть в названии Вашего ящика.

Сразу за ним следует значок @. А уж после него идет название того почтового сайта, на котором Вы заводили себе ящик.

5.png

Например, я зарегистрировал почту на Яндексе. Логин – это то, чем я ее буду открывать, поэтому я его запомнил и даже записал. Он у меня такой: samopalis

Значит адрес моего ящика: samopalis + @ + yandex.ru

Ни знака плюс, ни даже пробела в названии быть не должно. Значит, мой адрес электронной почты следующий: samopalis@yandex.ru

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

Нюансы

Еще раз напомню: каждый адрес электронной почты в интернете уникален.

Второго такого же адреса быть не может!

Но есть некоторые особенности в почтовых системах, из-за чего частенько возникает путаница. Вот об этом я хочу рассказать подробнее.

Яндекс.Почта

Когда Вы заводите себе имя в этой системе, Вам дается уникальный логин плюс часть @yandex.ru

7.png

Но это еще не все. Дополнительно к каждому логину даются «прибавки» следующего вида: @ya.ru, @yandex.com, @yandex.by, @yandex.ua, @yandex.kz

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

Таким образом, если у меня адрес samopalis@yandex.ru, я спокойно могу написать на визитке samopalis@ya.ru или любой другой из вариантов – письмо все равно придет ко мне.

8.png

Но и это еще не все! Также в качестве логина можно использовать свой номер мобильного телефона. Естественно, с приставкой @yandex.ru или любой другой (@ya.ru, @yandex.com и т.д.). Подробнее об этом можно узнать по ссылке.

Mail.ru

При получении ящика на сайте mail.ru предлагается выбрать имя для него с любым из окончаний: @mail.ru, @list.ru, @bk.ru, @inbox.ru.

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

9.png

Это означает, что если Вы зарегистрировали себе логин ivan с приставкой @bk.ru, то войти в свою почту можно будет только с этим окончанием и ни с каким другим. Со стандартным @mail.ru почта просто-напросто не откроется.

Более того, если кто-то отправит Вам письмо НЕ на адрес ivan@bk.ru, а на адрес ivan@mail.ru, Вы его не получите. В лучшем случае письмо никуда не отправится, а в худшем оно попадет к другому человеку, у которого точно такой же логин, но с другой приставкой.

10.png

Например, при регистрации почты я хотел себе выбрать имя neumeka@mail.ru, но оказалось, что оно уже занято. Пришлось выбирать с другой приставкой. Если вдруг мне кто-то захочет написать письмо на адрес neumeka@mail.ru, то оно придет не мне, а к другому человеку.

Rambler.ru

Ситуация такая же, как и с mail.ru. Можно завести адрес со следующими приставками: @rambler.ru, @lenta.ru, @autorambler.ru, @myrambler.ru, @ro.ru

11.png

Получив ящик с приставкой @ro.ru, войти в почту с тем же логином, но под @rambler.ru невозможно. И письма при отправке на такой адрес до Вас также не дойдут.

Где написан мой адрес почты

Свой адрес электронной почты можно узнать прямо внутри ящика. Кстати, он также автоматически вставляется в каждое письмо, которое Вы отправляете.

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

12.png

В почте на Mail.ru он также написан вверху справа:

14.png

В ящике на Gmail нужно нажать на кружочек с человечком (или свою иконку/фотографию) в верхнем правом углу. Появится окошко, где будет написан адрес:

15.png

В почте на Rambler адрес покажется, если нажать на имя вверху справа:

16.png

Используемые источники:

  • https://webereg.ru/servisy/sdelat-adres-elektronnoy-pochty-chto-takoe
  • https://m.habr.com/post/224623/
  • http://www.neumeka.ru/address.html

Ссылка на основную публикацию