Однажды у нас в CRM появились 3 загадочных клиента. С каждым вёл переговоры отдельный продавец. А потом выяснилось, что эти клиенты — один и тот же человек с одним и тем же имейлом.

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

Спойлер: это не связано с европейским регламентом по защите данных (GDPR) и правом клиента быть забытым (потребовать от компании удаления всей информации о себе).

Имя пользователя

Адрес электронной почты состоит из локальной части, @ и домена почтовика. Их сочетание позволяет однозначно идентифицировать конкретного получателя почты. В локальную часть попадает имя пользователя почтового сервиса. Например, в адресе anton@gmail.com это имя пользователя «anton».

Стандарт RFC 5322, описывающий формат электронных писем, в локальной части разрешает использовать:

  • строчные и заглавные латинские буквы,

  • цифры,

  • точки (но не в начале или конце и не 2 подряд),

  • дефисы,

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

Я написал «вы удивитесь», потому что обычно в имени пользователя почтовые сервисы позволяют использовать только перечисленные выше символы (а иногда и того меньше). Поэтому редко можно встретить «+» в адресе электронной почты. Но всё же можно.

Субадресация

Стандарт RFC 5233 описывает практику субадресации (subaddressing). Суть в том, что почтовый сервис при доставке письма может игнорировать то, что в локальной части идёт после определённого символа. Обычно это «+», но могут быть и другие. Субадресацию поддерживают все основные почтовики.

Например, у меня может быть адрес электронной почты anton@gmail.com, но при регистрации на Хабре я укажу anton+habr@gmail.com и всё равно смогу получать письма. Зачем это надо?

1. Борьба со спамом. Оставляя свой имейл в сомнительном месте, можно написать anton+shadyplace@gmail.com и, если на этот адрес начнут приходить письма от нигерийских принцев, можно:

  • Понять, кто слил данные;

  • Настроить моментальное удаление писем, приходящих на этот адрес.

2. Сортировка писем. Можно регистрироваться в финансовых продуктах с имейлом anton+finance@gmail.com и настроить фильтр так, чтобы все письма на этот адрес сразу попадали в папку «Финансы».

3. Тестирование продукта QA-инженерами при разработке. Часто для тестирования мало одного пользователя: в продукте взаимодействует несколько ролей, клиенты могут находиться на разных стадиях оказания услуги и так далее. Зачем заводить по ящику для каждого тестового пользователя, постоянно перелогиниваться между ними ради одноразовых кодов, когда ящик может быть один?

Точки, доменные алиасы и регистр

Gmail — единственный из крупных почтовых сервисов игнорирует точки в имени пользователя. То есть письма, отправляемые на anton@gmail.com и an.ton@gmail.com, попадают в один и тот же ящик.

Конечно, этим можно воспользоваться для сортировки почты с определёнными неудобствами и ограничениями: в имя «anton» влезет 16 комбинаций точек, учитывая ограничения RFC 5322. Но в первую очередь фича снижает количество писем, отправляемых не туда из-за опечаток и невнимательности. Знаю человека, которому это спасло однажды много нервов.

У некоторых почтовиков есть несколько доменных имён. Например, Гугл Почта — это и gmail.com, и менее известный googlemail.com. То же самое с yandex.ru и ya.ru, yandex.com, yandex.kz, yandex.by. И так далее. Письма, отправленные на anton@yandex.ru и anton@ya.ru получит один и тот же человек.

И все основные почтовики игнорируют регистр букв в локальной части имейла: что anton@ya.ru, что Anton@ya.ru — всё равно.

Тайна третьей планеты оказалась не такой уж тайной

Выяснилось, что наша форма регистрации ничего этого не учитывает.

Но возник вопрос: надо ли? Если пользователь уже зарегистрирован с адресом anton@gmail.com, надо ли мешать ему зарегистрироваться ещё раз с адресами:

  • anton+something@gmail.com,

  • an.ton@gmail.com,

  • anton@googlemail.com,

  • Anton@gmail.com.

Понятно, что, если ему потребуется 3 учётных записи в нашем продукте, это не станет непроходимым препятствием. Он просто использует 3 разных ящика.

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

И чисто логически: если мы знаем, что 3 разных электронных адреса указывают на один ящик, как-то неправильно создавать с ними разные аккаунты. Например, проблему с дублированием аккаунтов при регистрации через соцсети — решают (см. схему идеальной регистрации Павла Шерера).

Как учесть эти нюансы с имейлами

При регистрации:

  1. Нормализовать имейл: привести буквы к нижнему регистру, взять основной домен почтового сервиса, убрать плюс и всё после него, убрать точки из локальной части для Gmail.

  2. Сравнить с уже существующими в базе нормализованными имейлами.

  3. Если совпадений нет — сохранить и исходный, и нормализованный имейл. Исходный будет отображаться в пользовательском профиле и использоваться для отправки писем. Вдруг человек действительно размечает так почту.

  4. В противном случае — сообщить, что пользователь с таким имейлом уже есть, и предложить войти. Или — что с таким имейлом зарегистрироваться нельзя (если есть требование от безопасников или комплаенса).

При входе:

  1. Не обязательно указывать исходный имейл, поиск всё равно пройдёт по нормализованным.

  2. Если совпадений нет — сообщить, что логин или пароль неверны.

  3. Если совпадение есть и указан корректный пароль — пропустить. Без пароля никто кроме владельца ящика войти не сможет.

При восстановлении пароля:

  1. Не обязательно указывать именно исходный имейл.

  2. Но письмо с инструкцией отправится на исходный. Левый человек этого письма не получит, даже если это странный почтовый сервис, который позволяет разным людям получить адреса anton@domain.com и Anton@domain.com.

Минусы такого подхода:

  • Пользователи упомянутого выше странного почтового сервиса с имейлами anton@domain.com и Anton@domain.com смогут зарегистрироваться в нашем продукте только один раз. Кто первый — того и тапки. Но это маловероятно, так как такие почтовые сервисы — скорее исключение.

  • Тестировщикам придётся использовать разные ящики для тестовых аккаунтов, что неудобно. Но можно сделать исключение для имейлов с доменом нашей компании.

Как делают другие

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

Имейлы

ChatGPT

Notion

Amazon

+something

❌ Как новый

❌ Как новый (отправляет код для подтверждения регистрации)

❌ Как новый

Точки и домен gmail.com

❌ Как новый

❌ Как новый

❌ Как новый

Домен googlemail.com

❌ Как новый

❌ Как новый

❌ Как новый

Заглавные буквы

✅ Как уже зарегистрированный (предлагает ввести пароль, чтобы войти)

✅ Как уже зарегистрированный (отправляет код для входа)

✅ Как уже зарегистрированный (предлагает ввести пароль, чтобы войти)

Складывается впечатление, что это не база, а скорее nice to have фича.

Вывод

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

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

Полезные материалы:

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


  1. forthgate
    05.08.2025 20:06

    Хорошо что валидация email в таком формате отсутствует на большинстве сервисов. Стараюсь по необходимости оставлять на разных площадках в качестве контакта свой ящик + имя сервиса. По крайней мере потом по полученному спаму можно узнать кто из контор сливает адреса


    1. Grav Автор
      05.08.2025 20:06

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


      1. YegorP
        05.08.2025 20:06

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


        1. askv
          05.08.2025 20:06

          А если ещё просить подтверждение создания эккаунта на email, то и вовсе непонятно, зачем это делать.


        1. Grav Автор
          05.08.2025 20:06

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


    1. gluck59
      05.08.2025 20:06

      по полученному спаму можно узнать кто из контор сливает адреса

      Что это дает практически?


      1. kapany3
        05.08.2025 20:06

        Можно заблокировать целиком этот email, всё равно он предназначался для конкретного сервиса


        1. wmgeek
          05.08.2025 20:06

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


          1. vikarti
            05.08.2025 20:06

            И вот поэтому - simplelogin и подобные (в том числе Apple'овский). Спамер получит либо адрес spamer@userdomain.com либо spamer.[A-Z0-9]{4} @один_из_доменов_сервиса_или_подключеных пользователем, любое вырезание приведет к тому что письмо просто не дойдет


        1. gluck59
          05.08.2025 20:06

          Можно. Но вопрос был в другом:

          по полученному спаму можно узнать кто из контор сливает адреса

          Что это дает практически?

          Расшифрую.

          1. по полученному спаму можно узнать кто из контор сливает адреса

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

          3. Узнали.

          4. ...и какой нам профит от того что узнали? Законодательство в этом отношении пшик — у меня ФАС заседали с января по июнь и... ничего.


          1. osmanpasha
            05.08.2025 20:06

            -


          1. osmanpasha
            05.08.2025 20:06

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


            1. gluck59
              05.08.2025 20:06

              Спамом — как раз они: https://fas.gov.ru/pages/Reklamnyjspam

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


      1. kablag
        05.08.2025 20:06

        у меня через плюс указаны группы по тематикам, на которые настроены фильтры почты. Т.е. мне не нужно добавлять адрес откуда мне пришло в какой-то фильтр руками (например, хобби), а это делается автоматом, так как всё про хобби я регистрирую с ящика myemail+hobby@email.com


    1. randomsimplenumber
      05.08.2025 20:06

      потом по полученному спаму можно узнать кто из контор сливает адреса

      И что с этим знанием делать?


    1. kablag
      05.08.2025 20:06

      жаль, что не все это позволяют делать


  1. askv
    05.08.2025 20:06

    Понять, кто слил данные;

    убрать плюс и всё после него


    1. Grav Автор
      05.08.2025 20:06

      Возможно, я недостаточно акцентировал на этом моменте внимание. "Убрать плюс" — это речь о нормализации имейла. При этом в базу сохраняется и исходный, и нормализованный имейл. И письма отправляться должны на исходный


      1. askv
        05.08.2025 20:06

        Вы-то да, а вот спамеры...


        1. kapany3
          05.08.2025 20:06

          Спамерам лень заморачиваться и номализовывать базы


    1. X-P0rt3r
      05.08.2025 20:06

      Да, тоже сразу подумал.

      Спасет только от недогадливых спамеров, которые не знают этих фич.

      То есть легче сразу завести "мусорный" ящик.


      1. askv
        05.08.2025 20:06

        Так по легенде ящик нужен для регистрации на ресурсе. Спасёт только свой почтовый сервер, на котором можно создать миллион алиасов к одному ящику.


        1. muxa_ru
          05.08.2025 20:06

          catchall достаточно распространённая опция, но потом задолбаешься это всё менеджировать.

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


          1. askv
            05.08.2025 20:06

            Так вместе с логином нужно запоминать ресурс, на который этот email отдал. Можно в менеджере паролей? Я вот неосторожно дал email какой-то левой конторе, и теперь валятся тонны спама.


        1. wmgeek
          05.08.2025 20:06

          Можно дефолтный ящик домена задать и все что не совпадет с существующими ящиками будет сыпаться на дефолтный.


          1. askv
            05.08.2025 20:06

            Это да. Но чтобы потом заблочить конкретный адрес, его придётся отдельно завести.


            1. wmgeek
              05.08.2025 20:06

              Alias можно прописать на спам ящик.


      1. Geologist5330
        05.08.2025 20:06

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

        Мусорный же ящик (ессно уникальный) юзаю только для мусорных ресурсов или для того чтобы добавить уровень анонимности.


      1. winorun
        05.08.2025 20:06

        Фильтрация почты настроить по субдомену, все остальное в спам. В случае слива субдомена, отправляем его в спам. Всё.
        Есть правда проблема, при регистрации нужно добавлять фильтр.


        1. kapany3
          05.08.2025 20:06

          Некоторые сервисы не принимают почту с субдоменами


          1. askv
            05.08.2025 20:06

            Никогда не сталкивался. У меня @domain.msk.ru


  1. eisaev
    05.08.2025 20:06

    У меня есть тёска, который гораздо позже меня завёл абсолютно такую же почту на gmail.com, но без точки между именем и фамилией. В итоге мне уже несколько лет сыпятся его письма о регистрации во всяких забавных местах, чеки покупок билетов в каких-то онлайн сервисах и т.п. Гуглу в поддержку писал - бесполезно, они (ну или очередной тупой бот) в полной уверенности, что такой ящик даже завести было невозможно при уже созданном моём.


    1. kinall
      05.08.2025 20:06

      А ему самому не писали?


      1. dyadyaSerezha
        05.08.2025 20:06

        А как?)


    1. old_bear
      05.08.2025 20:06

      О, собрат по несчастью. :D
      Я свой аккаунт уже больше 20 лет назад завёл, с точкой в адресе. И долгое время забот не знал. А где-то лет 5 назад начали сыпаться письма от на имя какого-то, судя по языку, турецкого перца который каким-то образом смог на себя зарегать ту же почту но без точки.
      И такой ведь активный перец попался, то в Твиттер, то в Мордокнигу, то ещё куда-нить повеселее норовит зарегаться. Так что приходится регулярно тыкать в ссылки "это не я", потому как перец не только активный но и упорный.
      Меня это в первую очередь беспокоит на предмет безопасности моего собственного аккаунта - не приходят ли мои письма с кодами подтверждения и прочими критичными вещами какому-то левому человеку? Да и вероятность стать виноватым за чужие подвиги тоже ненулевая.
      А почитав в интернетах отзывы других пострадавших, понял что Гугл считает эту проблему несуществующей и особой надежды на исправление нет. Так что на создал новый аккаунт, но переезд много времени и сил требует, ибо много чего за 20 лет накопилось.


  1. MEGA_Nexus
    05.08.2025 20:06

    anton@gmail.com, anton+habr@gmail.com, an.ton@gmail.com — почему всё это один и тот же имейл

    Возможно, это Антон Назаров (осознанная меркантильность) так шифруется, чтобы его снова не забанила администрация Хабра. :)


  1. MEGA_Nexus
    05.08.2025 20:06

    Касательно самой темы. Где-то на Хабре недавно была статья, где говорилось, что использовать + (плюс) в e-mail адресе - это плохая идея. Так что лучше так не делать.


    1. kablag
      05.08.2025 20:06

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


  1. muxa_ru
    05.08.2025 20:06

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


    1. Grav Автор
      05.08.2025 20:06

      Я бы здесь уточнил, что, несмотря на gmail.com в примерах, Гмейлу свойственно именно игнорирование точек. А остальные штуки с регистром, доменными алиасами и субадресацией свойственны всем основным почтовикам


  1. CBET_TbMbI
    05.08.2025 20:06

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

    Что касается пользы плюсов, как защиты от слива, то в целом сомнительно. Ничто не мешает условным спамерам нормализовать адрес.


    1. winorun
      05.08.2025 20:06

      Так письма на нормализованный адрес идут в спам.


      1. CBET_TbMbI
        05.08.2025 20:06

        Опасно. Мало ли кто из "хороших" мог нормализовать в своей базе данных. Да и самому всегда что ли плюсики добавлять... Если друг почту просит, ему Anton+Egor@gmail.com давать что ли? И что он подумает о такой почте?


  1. Proscrito
    05.08.2025 20:06

    Сперва даже удивился, разве может кто-то не знать про плюс в имейле. Но сразу же понял что это профдеформация.

    Кто бы ни придумал эту фичу - большой молодец. Удобно для тестирования чего-нибудь, где требуется рабочее мыло. Можно сколько угодно аккаунтов завести добавляя +1, +2, +admin и т.д. к имейлу и иметь сколько надо рабочих аккаунтов с одним реальным имейлом.


  1. dyadyaSerezha
    05.08.2025 20:06

    игнорируют регистр букв в локальной части имейла

    Что за локальная часть такая?


    1. dyadyaSerezha
      05.08.2025 20:06

      А, это то, что до имени домена?


      1. Grav Автор
        05.08.2025 20:06

        Да, это то, что идёт до @. В стандарте так и называется "local part"


  1. gluck59
    05.08.2025 20:06

    Попробовал отправить емейл на свой ящик с добавлением плюса, получил 550 User Unknown. Ящик обслуживается МТС, зачем им какие-то RFC?

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


    1. randomsimplenumber
      05.08.2025 20:06

      550 User Unknown

      Походу почтовый сервер с дефолтными настройками работает именно так. а обработку алиасов нужно прикручивать.


      1. gluck59
        05.08.2025 20:06

        Мне как клиенту нужно ее прикручивать?


        1. randomsimplenumber
          05.08.2025 20:06

          Нет конечно. Если авторы сервера не посчитали нужным - значит это не такой строгий стандарт.


  1. andyblaster
    05.08.2025 20:06

    Статья явно вдохновлена этой недавней статьей. Можно сослаться для интересующихся, там много дополнительного интересного обсуждения в комментах.

    Вдруг человек действительно размечает так почту.

    Если этот "вдруг" не случайный, то как стоит относиться к таким продвинутым людям?

    требование от безопасников или комплаенса

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

    Не обязательно указывать исходный имейл, поиск всё равно пройдёт по нормализованным.

    Помогите плиз, я все равно не до конца понимаю необходимость нормализации.

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

    Случай, когда две почты с разными тегами (после плюса) достанутся разным людям, уже контролируется держателем почтового сервера.

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


    1. Grav Автор
      05.08.2025 20:06

      Забавно, что недавно вышла статья на похожую тему, но я её не видел ранее. Моя статья вдохновлена именно случаем на работе, о котором я написал в самом начале.

      Если человек действительно размечает так почту, то с его точки зрения ничего не изменится (пока он не захочет завести ещё один аккаунт). Нормализация нужна только для того, чтобы сверить регистрируемый имейл с уже зарегистрированными в системе и не дать завести аккаунт с почтой anton+habr@gmail.com, когда там уже есть anton+habrahabr@gmail.com.

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

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

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

      А если говорить об ошибках, можно придумать разные примеры. Например, пользователь сначала зарегистрировался на Хабре с тегом anton+habrahabr@gmail.com, а потом, подзабыв об уже сделанной регистрации и выбранном для этого ресурса теге, регистрируется с тегом anton+habr@gmail.com. То есть это ошибка не на уровне опечатки, а не уровне оговорки или работы памяти.


  1. Byaka8kaka
    05.08.2025 20:06

    Ну, я бы так сказал эта проблема не только с электронной почтой)
    Похожая проблема есть с номерами телефонов. К примеру в одном онлайн магазине у меня получилось зарегестрировать 2 аккаунта на 1 номер телефона, 8-999 и +7-999. Система распознала их как разные, хотя номер по факту один и тот-же. При этом у платформы было "ограничение" - 1 номер = 1 аккаунт)


    1. askv
      05.08.2025 20:06

      Если номер местный, то можно попробовать без кода города ещё. :)