Как стать автором
Обновить

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

Как раз недавно выпиливал проверку email в одном из приложений, полностью согласен с автором. Все проверки бессмысленны, единственное, что стоит проверить это наличие собаки в строке.
А за что заминусили? Годный коммент. В пользу того что всё-таки валидировать email адреса на соответствие стандартам не помешает.
Наверное минус за то, что swiftmail уже запатчили.
НЛО прилетело и опубликовало эту надпись здесь

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


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

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

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

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

— Это иногда работает лучше, чем кнопка «Активировать/Подтвердить», но зависит от аудитории.
Прям антисовет. Почти никто не читает приветственные письма.
Зависит от аудитории.
Если бы их ни кто не читал, эти письма и не рассылал бы никто.
Только вот как всегда, замечательны слова любой статьи разбиваются о реальность — никто их не читает, а если читает — то не следует им.
Пятница! Выдыхай ))
Это решит только п.1.
Только его и нужно решать.
Как же бесят валидаторы, которые считают, что кроме символов [a-z\-\.@] больше ничего в адресе электронной почты не существует. Они даже плюс заворачивают как недействительный символ.
Приведенный Вами валидатор еще и цифры посчитает недействительными :)
Больше всего бесят валидаторы, которые не пропускают email адреса из не .com/.org доменов
НЛО прилетело и опубликовало эту надпись здесь
Может это отсылка к американским реднекам?
Первой строкой в гугле на имя «Daryl» вылезает Daryl Dixon из «Ходячих мертвецов», как раз представитель стереотипных реднеков.
На моей памяти, это уже четвёртая или пятая статья про валидацию имейла.
Если адрес электропочты критичен, тогда есть смысл спросить его ДВА раза и отключить копи-пейст на обоих полях. Заставить юзера два раза напечатать его эл. адрес.

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

Оба раза должны совпасть конечно же.
И что? На не привычной клавиатуре например вполне можно набрать два раза не правильно. Кнопка какая-то может западать. Да мало ли вариантов.
Только сперва задумайтесь настолько ли нужен пользователю именно ваш сайт, что он будет дважды ручками вводить свой e-mail.
Когда можно копипастить — копипащу из первого во второе. Когда нельзя — я действительно задумаюсь, а надо ли мне тут региться. Лишние поля — зло в любом случае.
В случае с большинством интернет магазинов ответ очевиден.
Я про серьезные сайты сейчас… На чем-то менее серьезном хватит и 1 раз имейл. Или фейсбук
я в упор не понимаю, зачем пароль скрывают и два раза просят ввести, ведь все пишут его в keepass/etc., а потом копипастят в оба поля, а вы ещё и с адресом предлагаете извращаться

когда вижу такое извращение, единственная мысль — ну что за дебилы собрались
НЛО прилетело и опубликовало эту надпись здесь
ведь все пишут его в keepass/etc., а потом копипастят в оба поля


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

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

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

Я в 90% случаев увидев 2 email просто ухожу, в 10% сайт как бы нужен, но я всегда копирую первое поле и если мне ещё и это не дадут сделать, то скорее всего я пойду искать конкурента у которого нет таких заморочек.
Как же я тебя ненавижу!
А почему нет варианта отправлять самим пользователем письмо с каким-то уникальным ключом?
Тогда ошибки не будет 100%
Я смотрю у вас ник не для красного словца выбран…
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

Don't mention it…
Статью не читай @ сразу отвечай.
Очередная статья о том, что вместо того чтобы решать проблему, её можно проигнорировать. А давайте сформулируем задачу так: найти в произвольном тексте все email-адреса. По одной лишь собаке будете искать?
Это совсем другая задача, и решать её следует по другому.
Проверять что введен символ собаки и что минимум есть еще 2 символа a@a

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

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

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

Итого 5 или 6 тапов, весь процесс занимает не более 10 секунд и какого-то отторжения не вызывает.
мобильным приложением можно перехватывать определенные ссылки.
Определяем, что пользователь отправил на активацию с мобильного, формируем ссылку для мобильного, клиент ее тычет, андроид спрашивает, как ее открыть, браузером или приложением
Кажется я уже читал нечто подобное… У меня в гугле первая статья по запросу «валидация email»: https://habrahabr.ru/post/175375/ Я года два назад оригинал той статьи заказчику скидывал, когда он приставал ко мне с валидацией.
Пользователь с гораздо большей вероятностью введёт неправильный и действительный адрес, чем недействительный.
Вероятно, это зависит от аудитории. По моей практике — точно наоборот. Неправильный и действительный адрес был едва ли один за несколько лет. А вот недействительные каждый день вводят.

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

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


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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Какой смысл в таких ящиках, если нормальный человек (не sup3r}{ack3%-@example.com) будет использовать [-_.0-9a-z] слева от @?
Я тоже так считаю, что рядовой пользователь будет вводить символы a-z0-9, ну и край — и +. Все остальные извращенцы составят примерно 1% от основного состава. Задумайтесь, а нужны ли они вам?
P.S. Это каким нужно быть извращенцем, чтобы каждый раз вводить свою почту в виде #!$%&’*+-/=?^_`{}|~@example.com?
Я вам скажу больше, у меня почта вида a@abc.ab (там 3 буквенный домен в 2 буквенной зоне), с которой стоит форванд на основной [a-z] ящик.
Делал специально, чтобы люди (в том числе иностранцы) не имели проблем записать мой мейл из телефонного разговора… с другой стороны они меня каждый раз спрашивают (кто слышет в первый раз), не ошибся ли я в почте, мол она неправильная на их взгляд, так как люди привыкли к хотмейлам и гмейлам.
Я об этом и веду речь. Почти все привыкли слышать и читать ящики в буквенно-цифровом виде и плюс еще тире. Если выходишь за рамки общепринятых обозначений, то начинают переспрашивать и уточнять. Поэтому есть ли смысл пропускать такие исключения? Если это не сайт гиков программистов или сисадминов. ;) Вот реально можно ожидать всё, что угодно. Но вот какова вероятность встретить такие адреса?
А какой смысл отсеивать таких пользователей? Не могу придумать никакой причины для этого кроме «хочу чтобы меня кто-нибудь ненавидел».
Зато достаточно по валидации определиться /^[a-zа-яё0-9_\-\.]{2,30}@[a-zа-яё0-9_\-\.]{1,40}$/iu
Может и не идеально, но почти все нормальные ящики сюда можно загнать.
Ещё раз спрашиваю — ЗАЧЕМ? Вы делаете дополнительную проверку, исполняете дополнительный код, который кто-то дополнительно разработал — а из «полезных» результатов — только увеличение энтропии во вселенной и ненависть нескольких человек по отношению к вам. Вам шашечки или ехать?
Как минимум ящики надо проверять, а не ловить ошибки от мейлера.

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

Да и RFC… если оставить [\w\.\-_] юзеров, то никто и не пострадает… в большей массе.
И RFC RFC рознь.
Скрытый текст
Я вот сейчас занят конфигуратором для NSD, меня от RFC по DNS просто тошнит, в итоге я просто взял исходник NSD и по ним делаю базу и конфигуратор. Если уж NSD не 100% соотв. RFC (например по длине полей), то и мой продукт будет так же не полностью соответствовать.
Вы так и не ответили на главный вопрос — зачем? Зачем проверять ящики? Ну усложните вы кому-то с необычным ящиком жизнь, вам-то что от этого? Столько усилий только для того, чтобы кому-то нагадить? Ведь то, что ящик соответствует вашему шаблону — не гарантирует того, что мейлер не вывалит ошибку (потому что домена например не существует), и не грантирует того, что емейл введён верно (если например опечатались в имени). Это не даст ничего ни вам, ни вашему приложению. Ну, разве что если вы работник на ставке и вам нужно изобразить бурную деятельность, а то что результат бесполезен — не ваша проблема?
Так можно и данные на SQL проверять, и сразу в базу!

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

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

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

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

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

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

Если ящик один в один такого типа, то я еще таких не встречала. Поэтому пусть идет и регенет нормальный ящик.
Лол, разница между
  • оставить числа, буквы и -._
  • тоже самое + 2+ символа слева от @

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

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

НЛО прилетело и опубликовало эту надпись здесь
Учитывая, что example.com купить нельзя, сомневаюсь
У нее был (.)(.)~@example.com
А почему никто не валидирует e-mail через oauth-like механизм? И почему ещё gmail не предоставляет возможности web-подтверждения подписок на рассылки/указания e-mail при регистрации? Это же на 100% решает проблему распознавания спама для активационных e-mail.
Google давно уже это сделал. Называется «регистрация через Google-аккаунт»
Что с кирилистическими адресами?
Вероятно как и с кириллическими доменами — все очень сложно…
Как проверить адрес на правильность?
— Никак.
— Высылайте проверочные письма!

З.Ы. Это если кому лень читать полет фантазии автора статьи…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории