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

Хитрость в том, чтобы сразу определить значение слова «действительный».

Мы разработчики — технические ребята, так что наиболее логичным будет проверить на соответствие официальным критериям. Вот некоторые примеры валидных адресов email, которые соответствуют критериям.


en.wikipedia.org/wiki/Email_address#Valid_email_addresses

Всё, что вы знаете, неправильно


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

  1. Понимает ли пользователь, что от него требуется ввести адрес электронной почты в это поле?
  2. Правильно ли он ввёл свой адрес в поле?

Если у вас хорошо заметная форма с подписью "email" и пользователь где-то в этой форме ввёл символ ‘@’, то будет безопасно предположить, что ответ на первый вопрос положительный. Это легко.

Далее мы хотим проверить, что пользователь правильно ввёл свой адрес электронной почты.

Невозможно.

Важно, чтобы вы согласились со мной в данном тезисе: это невозможно.

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

Исследуем вопрос


Представим, что мой адрес электронной почты davidgilbertson@example.com. Это 27 нажатий на клавиатуре, которые могут привести к опечатке. Ошибка в любом символе определённо приведёт к вводу неправильного адреса, но необязательно этот адрес будет недействительным.

[прозрение]

Даже если бы в окно ярко засветило солнце, меня одолел особенно дикий чих (я страдаю от
светового чихательного рефлекса
Плохо изученное аутосомно-доминантное заболевание — прим.пер.
) и я по ошибке напечатал #!$%&’*+-/=?^_`{}|~@example.com — так вот, я всё равно пройду большинство проверок на «действительный» адрес электронной почты. (Ещё хуже, если система скажет, что адрес недействительный, когда он на самом деле существует! Ради интереса я только что написал на адрес #!$%&’*+-/=?^_`{}|~@example.com — и девушка сказала, что её ужасно бесит, когда её адрес электронной почты считают недействительным. Она также жалеет о покупке домена example.com, но не собирается сдаваться, как и тот парень, купивший milk.com. Мы начали чатиться, и оказалось, что она живёт всего в паре кварталов от меня и тоже собирает винтажные камеры; на следующей неделе мы пойдём играть в гольф. Я думаю, может она и есть та самая. Впрочем, нужно мне заканчивать болтать и продолжить писать статью).

Так какова вероятность, что одна любая опечатка сделает адрес недействительным? Сделаем статистическую модель! Например, вот буква ‘g’. Я скорее допущу опечатку на видимой клавиатуре без нажатого Shift (в модели я учитываю «неизменённые» клавиши). Среди всех клавиш, которые можно нажать на физической клавиатуре, есть только шесть символов, которые в некоторых случаях могут сделать адрес недействительным: []\;, и пробел. 6 из 48. Вероятность 12%.

Но более вероятна опечатка на соседнюю клавишу. Например, нажатие на ‘h’ вместо ‘g’. Так что из списка 117 млн существующих почтовых адресов я вычислил частотность каждого символа, для каждого из них записал, какие клавиши находятся рядом из клавиатуре, и вывел итоговую вероятность того, что опечатка приведёт к недействительному адресу (знаю, что взламывать LinkedIn ради рассуждения о валидации почтовых адресов было немного чересчур, но любое мнение важно подтвердить реальными данными).

Например, символ ‘e’ считается символом с низким риском инвалидации, потому что все окружающие символы оставят адрес электронной почты по-прежнему действительным. Но рядом с ‘p’ есть ‘[’ и ‘;’ на расстоянии нажатия! Так что хотя это более редкий символ, чем ‘e’, но он несёт больший риск превращения адреса в недействительный, если по клавише промахнулись.

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


Графическое представление модели, показывающей зону опечатки вокруг P, с учётом недостатков мизинца

Теперь предположим, что Силки (фокс) сидит на клавише Shift и я нажимаю неправильную клавишу на клавиатуре. Здесь я рискую попасть по одной из шести опасных клавиш: []\;, и пробел. И опять, они делают адрес недействительным только при определённых условиях. Более вероятно, что нажатая клавиша Shift будет действовать только для букв с одной стороны «собачки» в адресе, так что буква ‘l’ с любой стороны считается особенно опасной.

Все сказанное относится к единственной опечатке, но если я сделаю вторую опечатку, то есть вероятность, что адрес станет опять действительным (например, если добавить \ после \). Конечно, всё это учитывается в модели.

Не стоит говорить, что я приложил такие же усилия в расчёте модели для экранных клавиатур.

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

Я также встроил в модель немного здравого смысла. Известно, что люди с адресом aol.com неумело набирают текст. Дерилы склонны нажимать все клавиши указательным пальцем, как будто боятся, что каждая кнопка обожжёт руку. Люди с буквой ‘z’ в имени используют механические клавиатуры и редко делают ошибки. Известные жизненные аксиомы.

Я также учёл факт, что любая кнопка перед «собачкой» в адресе игнорируется, и что ‘f’ и ‘h’ во многом одна и та же буква, если хорошенько подумать.

Результат


Итак, приняв в расчёт все факторы, я пропустил 117 миллионов адресов через модель. И вероятность, что некорректный адрес электронной почты будет зафиксирован программой валидации адресов составил…

0,00000000000000000000000000000000000000625%

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

Итог


Бессмысленно пытаться выяснить, является ли адрес «действительным». Пользователь с гораздо большей вероятностью введёт неправильный и действительный адрес, чем недействительный.

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

На 100% правильный способ


Высылайте пользователям письмо активации. (Здесь жирная точка для эффекта).

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



Если вам кажется, что эта статья бессмысленная и глупая, и вы хотите ещё такого же, оцените мой подкаст «Дэвид читает Википедию». Он именно о том, о чём вы подумали.
Поделиться с друзьями
-->

Комментарии (98)


  1. NeonLost
    27.01.2017 01:13
    +12

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


    1. Vahan
      27.01.2017 11:06

      1. brizzz
        28.01.2017 12:45

        А за что заминусили? Годный коммент. В пользу того что всё-таки валидировать email адреса на соответствие стандартам не помешает.


        1. Vahan
          28.01.2017 15:38

          Наверное минус за то, что swiftmail уже запатчили.


  1. kloppspb
    27.01.2017 01:24
    +20

    На 100% правильный способ
    Высылайте пользователям письмо активации.

    <sarcasm>Неужели! Наконец-то! Даже не верю что мы дождались первой статьи на хабре, в которой об этом сказано открытым текстом!</sarcasm>


    1. TimsTims
      27.01.2017 18:44

      Да, дождались!


      Ждем еще пару лет, чтобы из статьи убрать кучу воды, и два предложения:
      1) Правильная валидация email: @
      2) Проверка существования email: отправить письмо


  1. Akuma
    27.01.2017 01:53

    Еще небольшое улучшение. Добавить активцию в приветственное письмо. Что-то вроде:

    Добро пожаловать на наш мега-крутой сайт,
    мы сильно вам рады, поэтому вот вам классная кнопка чтобы быстрее перейти на сайт/сделать покупку:

    КНОПКА (Ведет на сайт и сразу активирует Емаил)

    — Это иногда работает лучше, чем кнопка «Активировать/Подтвердить», но зависит от аудитории.


    1. flamefork
      29.01.2017 17:21
      +1

      Прям антисовет. Почти никто не читает приветственные письма.


      1. Akuma
        29.01.2017 17:32
        +1

        Зависит от аудитории.
        Если бы их ни кто не читал, эти письма и не рассылал бы никто.


  1. Jogger
    27.01.2017 02:56

    Только вот как всегда, замечательны слова любой статьи разбиваются о реальность — никто их не читает, а если читает — то не следует им.


    1. za90
      27.01.2017 08:49
      +2

      Пятница! Выдыхай ))


  1. demin
    27.01.2017 03:48
    +14

    <input type="email">
    

    и пусть разработчики браузеров об этом беспокоятся, а не я


    1. Ohar
      27.01.2017 04:03

      Это решит только п.1.


      1. za90
        27.01.2017 07:19
        +10

        Только его и нужно решать.


  1. johny
    27.01.2017 06:30
    +7

    Как же бесят валидаторы, которые считают, что кроме символов [a-z\-\.@] больше ничего в адресе электронной почты не существует. Они даже плюс заворачивают как недействительный символ.


    1. Syrex
      27.01.2017 10:34
      +1

      Приведенный Вами валидатор еще и цифры посчитает недействительными :)


    1. svilgelm
      27.01.2017 11:06
      +1

      Больше всего бесят валидаторы, которые не пропускают email адреса из не .com/.org доменов


      1. Dageron
        27.01.2017 12:47

        Это они так «борются» со спамом и ботами. Общался с техподдержкой одного сервиса, который патологически заворачивал ru именно по этой причине.


  1. za90
    27.01.2017 07:21

    Статья так быстро и толково закончилась (с 4" читал). Большая редкость, эта ваша сестра!)

    PS: кто такие «дерилы»?


    1. cheshirrrr
      27.01.2017 08:51
      +2

      Может это отсылка к американским реднекам?
      Первой строкой в гугле на имя «Daryl» вылезает Daryl Dixon из «Ходячих мертвецов», как раз представитель стереотипных реднеков.


  1. lockywolf
    27.01.2017 07:40
    +3

    На моей памяти, это уже четвёртая или пятая статья про валидацию имейла.


    1. za90
      27.01.2017 08:49
      +1

      В пятничном формате первая. Всем добра в этом треде.


  1. evil_kabab
    27.01.2017 08:05
    -16

    Если адрес электропочты критичен, тогда есть смысл спросить его ДВА раза и отключить копи-пейст на обоих полях. Заставить юзера два раза напечатать его эл. адрес.


    1. UksusoFF
      27.01.2017 09:02
      +5

      Вы уверены что два раза напечатать будет менее ошибочно чем скопипастить из тхт из которого пользователь всю жизнь копипастит?


      1. evil_kabab
        29.01.2017 14:14

        Оба раза должны совпасть конечно же.


        1. UksusoFF
          29.01.2017 16:56

          И что? На не привычной клавиатуре например вполне можно набрать два раза не правильно. Кнопка какая-то может западать. Да мало ли вариантов.


    1. cheshirrrr
      27.01.2017 09:11
      +11

      Только сперва задумайтесь настолько ли нужен пользователю именно ваш сайт, что он будет дважды ручками вводить свой e-mail.


      1. wladyspb
        27.01.2017 18:08
        +1

        Когда можно копипастить — копипащу из первого во второе. Когда нельзя — я действительно задумаюсь, а надо ли мне тут региться. Лишние поля — зло в любом случае.


      1. IT_Hound
        28.01.2017 17:14

        В случае с большинством интернет магазинов ответ очевиден.


      1. evil_kabab
        29.01.2017 14:16

        Я про серьезные сайты сейчас… На чем-то менее серьезном хватит и 1 раз имейл. Или фейсбук


    1. merlin-vrn
      27.01.2017 10:21
      -4

      я в упор не понимаю, зачем пароль скрывают и два раза просят ввести, ведь все пишут его в keepass/etc., а потом копипастят в оба поля, а вы ещё и с адресом предлагаете извращаться

      когда вижу такое извращение, единственная мысль — ну что за дебилы собрались


      1. psFitz
        27.01.2017 11:34
        +3

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


      1. Iora
        27.01.2017 11:42
        +3

        ведь все пишут его в keepass/etc., а потом копипастят в оба поля


        Все?! То есть по-вашему, пароли никто не помнит, м? Бедные люди.


        1. lobzanoff
          27.01.2017 14:13
          +1

          У меня, к примеру, несколько десятков паролей, и все вида «o9uG@:JZbqcYCh*o=;DPsf~L»
          Вы всерьез полагаете, что у всех такая же эйдетическая память как у Шелдона Купера?!


          1. Charg
            27.01.2017 14:51
            +1

            > У меня, к примеру, несколько десятков паролей, и все вида «o9uG@:JZbqcYCh*o=;DPsf~L»

            Ну ладно, а следует ли из этого утверждения что подобные пароли — у всех?


            1. aosja
              27.01.2017 16:58
              +1

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


    1. Squoworode
      27.01.2017 11:07
      +1

      Копирующие из блокнотика обидятся и уйдут.


    1. maxdedepol
      27.01.2017 12:14
      +1

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


    1. navion
      27.01.2017 18:12

      Как же я тебя ненавижу!


    1. goodwin98
      27.01.2017 18:17

      А почему нет варианта отправлять самим пользователем письмо с каким-то уникальным ключом?
      Тогда ошибки не будет 100%


    1. Jogger
      27.01.2017 18:24
      +1

      Я смотрю у вас ник не для красного словца выбран…


  1. ElForastero
    27.01.2017 08:05
    -2

    http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

    Don't mention it…


    1. Jogger
      27.01.2017 18:34

      Статью не читай @ сразу отвечай.


  1. kefirfromperm
    27.01.2017 08:49
    -7

    Очередная статья о том, что вместо того чтобы решать проблему, её можно проигнорировать. А давайте сформулируем задачу так: найти в произвольном тексте все email-адреса. По одной лишь собаке будете искать?


    1. Ogra
      27.01.2017 09:54
      +9

      Это совсем другая задача, и решать её следует по другому.


  1. OtshelnikFm
    27.01.2017 10:24

    Проверять что введен символ собаки и что минимум есть еще 2 символа a@a

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

    Потом опять возвращаться в мобильное приложение?

    Тут от этой логики у меня сорвало клапаны… Проясните.


    1. Virasio
      27.01.2017 10:44

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


    1. alexeykuzmin0
      27.01.2017 11:04

      По крайней мере у меня на андроиде этот процесс выглядит куда проще.
      1. Зашел на сайт/в приложение, вбил все данные, зарегистрировался.
      2. Приходит push-уведомление от GMail о приходе письма, тыркаю на него.
      3. Открывается письмо, в нем кнопка или ссылка, тыркаю на нее.
      4. Открывается браузер, в нем новая вкладка говорит «хозяин, готово». Тыркаю на кнопку «назад».
      5. Грузится опять приложение GMail с тем самым письмом, тыркаю еще раз назад.
      6. Открывается та самая вкладка в браузере или приложение. Иногда надо еще тыркнуть на «обновить».

      Итого 5 или 6 тапов, весь процесс занимает не более 10 секунд и какого-то отторжения не вызывает.


    1. Urichalex
      27.01.2017 11:07

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


  1. Virasio
    27.01.2017 10:41
    +1

    Кажется я уже читал нечто подобное… У меня в гугле первая статья по запросу «валидация email»: https://habrahabr.ru/post/175375/ Я года два назад оригинал той статьи заказчику скидывал, когда он приставал ко мне с валидацией.



  1. miksoft
    27.01.2017 10:49

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

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


    1. Kliba
      27.01.2017 12:44

      Опечатка в домене в 99% сделает адрес неправильным, недоступным, но не недействительным. Недействительным его сделает только несоответствие стандарту.


  1. zirix
    27.01.2017 10:53
    +1

    Можно проверять существование домена и mx записи на нем.
    Небольшой процент ощибок этот метод поймает.


    1. jetexe
      27.01.2017 11:23

      и очень сильно увеличит отклик формы и не совсем понятно зачем. Рядовой случай такой:


      1. регистрация пускает в профиль (юзер с минимальными правами но уже у нас в безе)
      2. отправка письма подтверждения
      3. Активация аккаунта.

      Зачем тут проверять MX? и что это конкретно даст? гарантию того что на домене есть почтовый сервер?
      Ну допустим у нас человек опечатался и ввел mael.ru и что дальше? MX у этого домена есть.
      Или забыл что нужно вводить gmail.com, а не google.com, и не google.ru, и даже не gmail.ru (такой MX тоже есть)


      И адрес валидный, и MX есть, вот только почта указана неверно


      1. alexeykuzmin0
        27.01.2017 11:27

        Я вам больше скажу: есть немало народу с почтой на google.com


        1. jetexe
          27.01.2017 11:31

          На всех приведенных мной примерах есть настоящие электронные почты настоящих людей.
          В случае с google.* это сотрудники компании


    1. Virasio
      27.01.2017 11:42

      А что если после @ указан IPv6-адрес?


    1. grossws
      28.01.2017 22:29

      И сломает кучу товарищей, которые до сих пор не добавили MX, но используют A. И такое MTA вполне допускают.


      1. nikitasius
        30.01.2017 10:08

        Далеко ходить не надо, сейчас без dmarc, dkim, spf, MX и r-dns (которая соотв. ответу мейлсервера) письма будут улетать в спам. Причем у гугла это еще более менее человечно, а у мелкософта — не глядя.


        1. grossws
          30.01.2017 19:25

          DMARC, благо, пока не является обязательным условием для жизни, как и DKIM. А настроить MX, rev DNS и SPF — дело недолгое.


          Гугл больше бесит отправкой легитимных писем из рассылок в spam, а иногда их отбрасыванием, чего очень не любят ezmlm и mailman. Меня из некоторых списков рассылки так выкидывало. И крайне неприятно, когда это какой-нибудь members@apache.org, а не просто какой-нибудь high traffic dev@.


          1. nikitasius
            31.01.2017 00:02

            А что трудного в том, чтобы настроить dmarc и dkim?


            1. grossws
              31.01.2017 11:19

              Для разумного админа, наверное, ничего сложного. Просто настроить какой-нибудь opendkim — дело нехитрое. Несколько больший геморрой (административный, в первую очередь) — управления ключами на всех серверах, которые отправляют почту наружу, управление доверенными хостами и подобные вещи.


              1. nikitasius
                31.01.2017 16:25

                Там в ключах прописан домен. Ничего не мешает скопировать такой ключ на «второй» сервер, который отправляет почту по тому же домену. Да и перегенерировать их не нужно.

                В идеале будет вот так:

                картинка
                image


  1. fpinger
    27.01.2017 11:05

    А ведь можно на основе «правильной» проверки отсеять кучу спамеров и особо одарённых. И это прекрасно для большинства сервисов. :P


  1. reforms
    27.01.2017 11:06

    Хороший перевод, спасибо. С автором статьи согласен.
    Но мне показалось, что к первым двум пунктам:
    1. Понимает ли пользователь, что от него требуется ввести адрес электронной почты в это поле?
    2. Правильно ли он ввёл свой адрес в поле?
    Обязательно нужно добавить 3 — А насколько Вашему сервису важно знать валидный адрес пользователя?
    И мыслей здесь несколько:
    1. Со времен появления сотовых телефонов значимость почты в разрезе возможности идентификации пользователя и обратной связи с ним резко упала.
    2. Что важней, что пользователь получит возможность приносить Вам прибыль, пользуясь Вашим сервисом (например ввиде покупки товаров и т.п.) или обязательная доставка рекламы на его почтовый адрес?

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


  1. Rende11
    27.01.2017 11:22

    Напомнило видео Андрея Листочкина, один из примеров был как раз про валидацию.


  1. ruslanfedoseenko
    27.01.2017 11:42

    Реальность email-а можно проверить подключившись к SMTP серверу и якобы пытаться отправить письмо. Адрес сервера можно вытащить из MX записей жлмена. После указания адреса кому отправляем большинство почтовых серверов отвечают ошибкой в случае отсутствия аккаунта, что свидетельствует об ошибке ввода или попытке ввести фейковый адрес.


    1. miksoft
      27.01.2017 11:56
      +1

      Реальность email-а можно проверить подключившись к SMTP серверу и якобы пытаться отправить письмо.
      Далеко не всегда.
      Например, у нас на работе тот сервер, который отвечает по MX-записи, не является конечным сервером и не содержит список всех адресов домена, а лишь принимает и передает все без разбору письма следующему серверу, который уже и занимается сортировкой писем по ящикам.

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


    1. jetexe
      27.01.2017 12:03

      окей, адрес существует, просто чужой не rfedoseenko@mail а efedoseenko@mail, соседние буковки, банальная опечатка


  1. xRay
    27.01.2017 11:46
    -2

    Т.е. валидация не нужна и пихаем в базу все что пользователь там ввел? Серьзно?


    1. xxxFeLiXxxx
      27.01.2017 12:18
      +2

      Именно так, а если валидация через ссылку в мейле не прошла на протяжении TTL — то удаляем из базы.


    1. vintage
      28.01.2017 13:40

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


  1. nikitasius
    27.01.2017 12:17

    Согласитесь это классно:

    -какой у тебя мейл?
    -#!$%&’*+-/=?^_`{}|~@example.com
    -??
    -слеш затем...


    Какой смысл в таких ящиках, если нормальный человек (не sup3r}{ack3%-@example.com) будет использовать [-_.0-9a-z] слева от @?


    1. kimisa
      27.01.2017 12:34

      Я тоже так считаю, что рядовой пользователь будет вводить символы a-z0-9, ну и край — и +. Все остальные извращенцы составят примерно 1% от основного состава. Задумайтесь, а нужны ли они вам?
      P.S. Это каким нужно быть извращенцем, чтобы каждый раз вводить свою почту в виде #!$%&’*+-/=?^_`{}|~@example.com?


      1. nikitasius
        27.01.2017 13:37

        Я вам скажу больше, у меня почта вида a@abc.ab (там 3 буквенный домен в 2 буквенной зоне), с которой стоит форванд на основной [a-z] ящик.
        Делал специально, чтобы люди (в том числе иностранцы) не имели проблем записать мой мейл из телефонного разговора… с другой стороны они меня каждый раз спрашивают (кто слышет в первый раз), не ошибся ли я в почте, мол она неправильная на их взгляд, так как люди привыкли к хотмейлам и гмейлам.


        1. kimisa
          27.01.2017 13:45

          Я об этом и веду речь. Почти все привыкли слышать и читать ящики в буквенно-цифровом виде и плюс еще тире. Если выходишь за рамки общепринятых обозначений, то начинают переспрашивать и уточнять. Поэтому есть ли смысл пропускать такие исключения? Если это не сайт гиков программистов или сисадминов. ;) Вот реально можно ожидать всё, что угодно. Но вот какова вероятность встретить такие адреса?


          1. Jogger
            27.01.2017 16:21
            +4

            А какой смысл отсеивать таких пользователей? Не могу придумать никакой причины для этого кроме «хочу чтобы меня кто-нибудь ненавидел».


            1. kimisa
              27.01.2017 16:25

              Зато достаточно по валидации определиться /^[a-zа-яё0-9_\-\.]{2,30}@[a-zа-яё0-9_\-\.]{1,40}$/iu
              Может и не идеально, но почти все нормальные ящики сюда можно загнать.


              1. Jogger
                27.01.2017 17:35
                +4

                Ещё раз спрашиваю — ЗАЧЕМ? Вы делаете дополнительную проверку, исполняете дополнительный код, который кто-то дополнительно разработал — а из «полезных» результатов — только увеличение энтропии во вселенной и ненависть нескольких человек по отношению к вам. Вам шашечки или ехать?


                1. nikitasius
                  28.01.2017 00:20

                  Как минимум ящики надо проверять, а не ловить ошибки от мейлера.

                  А далее — уже личное дело каждого. Кто девушку ужинает, тот ее и танцует, только в плане сервера. Каждый админ это художник, он делает так видит… в лучшую или худшую стороны.

                  Да и RFC… если оставить [\w\.\-_] юзеров, то никто и не пострадает… в большей массе.
                  И RFC RFC рознь.

                  Скрытый текст
                  Я вот сейчас занят конфигуратором для NSD, меня от RFC по DNS просто тошнит, в итоге я просто взял исходник NSD и по ним делаю базу и конфигуратор. Если уж NSD не 100% соотв. RFC (например по длине полей), то и мой продукт будет так же не полностью соответствовать.


                  1. Jogger
                    28.01.2017 00:54
                    +1

                    Вы так и не ответили на главный вопрос — зачем? Зачем проверять ящики? Ну усложните вы кому-то с необычным ящиком жизнь, вам-то что от этого? Столько усилий только для того, чтобы кому-то нагадить? Ведь то, что ящик соответствует вашему шаблону — не гарантирует того, что мейлер не вывалит ошибку (потому что домена например не существует), и не грантирует того, что емейл введён верно (если например опечатались в имени). Это не даст ничего ни вам, ни вашему приложению. Ну, разве что если вы работник на ставке и вам нужно изобразить бурную деятельность, а то что результат бесполезен — не ваша проблема?


                    1. nikitasius
                      29.01.2017 01:01
                      -2

                      Так можно и данные на SQL проверять, и сразу в базу!

                      На самом деле все просто — почта такая, как я писал выше, она серая и убогая. Талантливые и яркие }{aцkeрbI@ идут лесом искать другие сервисы (=делать другую почту), так как скрипты, которые вероятно что-то делают или как-то обрабатывают ящики (я ничего с мыльниками не делаю) могут сломаться, и значит из надо переписать, что ломает. Следом уязвимости (как в пхпмейлеров), хрен знает что еще найдут, но она не взлетит, если система просто проигнорит такую почту.

                      Дискуссию не о чем. Я, например, не люблю, когда в базе каша в адресах, значит у меня и все подконтрольные сервера не примут такие ящики. Дале хуже… у меня вообще пачка проверок на клиентов (которые ко мне лезут на коннект), в том числе и на reverse dns, и если что-то не нравится — reject.


                      1. Jogger
                        29.01.2017 01:11
                        +2

                        Спасибо, теперь мне всё ясно. Синдром вахтёра в терминальной стадии. Вопросов больше не имею.


                        1. nikitasius
                          30.01.2017 01:26
                          -1

                          Скорее педанта-библиотекаря и воспитателя детсада.


                  1. grossws
                    28.01.2017 22:39

                    Да и RFC… если оставить [\w.-_] юзеров, то никто и не пострадает…

                    Только ВасяПупкин+майор@мвд.рф xD


              1. grossws
                28.01.2017 22:37
                +1

                И адрес nikitasius из примера выше не пройдёт, т. к. перед @ всего 1 символ.


                1. kimisa
                  29.01.2017 07:29
                  -4

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


                  1. nikitasius
                    30.01.2017 10:06

                    Лол, разница между

                    • оставить числа, буквы и -._
                    • тоже самое + 2+ символа слева от @

                    Видна невооруженным глазом.


      1. grossws
        28.01.2017 22:34

        А ещё -, _ и . часто используются. Видел кучу рабочих адресов вида name.lastname@..., lastname.f@... и т. п.


  1. mwambanatanga
    27.01.2017 18:42
    -1

    Как там с девушкой (той, с мылом #!$%&’*+-/=?^_`{}|~@example.com)? Всё склеилось?


    1. alexeykuzmin0
      27.01.2017 20:40

      Учитывая, что example.com купить нельзя, сомневаюсь


    1. nikitasius
      28.01.2017 00:05
      +1

      У нее был (.)(.)~@example.com


  1. dpantele
    28.01.2017 19:35

    А почему никто не валидирует e-mail через oauth-like механизм? И почему ещё gmail не предоставляет возможности web-подтверждения подписок на рассылки/указания e-mail при регистрации? Это же на 100% решает проблему распознавания спама для активационных e-mail.


    1. cheshirrrr
      30.01.2017 10:39
      +2

      Google давно уже это сделал. Называется «регистрация через Google-аккаунт»


  1. easterism
    28.01.2017 22:37

    Что с кирилистическими адресами?


    1. IT_Hound
      29.01.2017 01:10

      Вероятно как и с кириллическими доменами — все очень сложно…


  1. androidformax
    31.01.2017 13:15

    Как проверить адрес на правильность?
    — Никак.
    — Высылайте проверочные письма!

    З.Ы. Это если кому лень читать полет фантазии автора статьи…