uCheckeruChecker
Марк АвриловОпубликовано обновлено 6 мин чтения

Опечатки в email: как валидатор их находит и что с ними делать

Человек вводит anna@gmial.com, форма принимает адрес, письмо-подтверждение уходит в никуда. Обнаружение опечаток (typo detection) ловит такие ошибки ввода и предлагает исправление: «Вы имели в виду gmail.com?»

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


Расстояние между строками

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

Классический способ считать правки это расстояние Левенштейна: вставка, удаление, замена символа. Вариант Дамерау-Левенштейна ещё и считает одной правкой перестановку соседних букв, а это частая ошибка быстрого набора (gmial вместо gmail). Порог обычно держат маленьким, и в библиотеке mailcheck, которая считает правки не по Левенштейну, а алгоритмом sift4, он по умолчанию равен двум. При большем пороге совпадения становятся случайными, и подсказка начинает «исправлять» редкие, но настоящие домены.

Когда кандидатов несколько, помогает раскладка клавиатуры. Соседние клавиши путают чаще, и «a» вместо «s» правдоподобнее, чем «a» вместо «p».

Типичные опечатки

gmial.com→ gmail.com
gamil.com→ gmail.com
gmal.com→ gmail.com
ynadex.ru→ yandex.ru
yanex.ru→ yandex.ru
hotmial.com→ hotmail.com
outloo.com→ outlook.com
mal.ru→ mail.ru

Рассчитывать, что домен с опечаткой отсеется сам на проверке MX, не стоит. На 16 октября 2026 года у gamil.com, yanex.ru и outloo.com были MX-записи, то есть почту на них кто-то принимает. Проверка «у домена есть почтовый сервер» такие адреса пропустит, нужен отдельный список известных опечаток.

Где подсказывать

Лучшее место для подсказки это форма, в момент, когда человек ушёл с поля email. Рядом появляется строка «Возможно, вы имели в виду gmail.com?» и кнопка, которая подставит исправление. Как встроить такую проверку в форму, разобрано в статье про валидацию email при регистрации.

Подсказка не должна давить. Человек может пользоваться редким доменом, похожим на популярный, поэтому вариант «нет, оставить как есть» нужен всегда.

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

Опечатки в имени ящика

С частью до @ сложнее. Эталонного списка имён нет, и валидатор не знает, как правильно, j.smith или jsmith. Остаётся SMTP-проверка: если сервер отвечает на jsmth@gmail.com кодом 550, ящика нет, но подсказать верное имя по этому ответу нельзя.

Отдельный случай: двойные буквы. Клавишу случайно нажали дважды, и вышло userr@mail.ru вместо user@mail.ru. Убирать повторы автоматически ненадёжно, двойная «o» в yahoo вовсе не опечатка.

Готовые библиотеки

Для фронтенда есть mailcheck: сравнивает домен со встроенным списком и показывает подсказку, список доменов можно заменить своим. На GitHub между релизом 1.1.2 в 2016 году и бета-версией 2.0 в сентябре 2026-го прошло десять лет, а в npm до сих пор последняя версия 1.1.1.

На Python пакет email-validator проверяет синтаксис и наличие почтовых записей у домена, а подсказок опечаток не делает. Подробнее о нём в обзоре валидации email на Python.

Как это делает uChecker

У uChecker есть список из нескольких сотен доменов, куда входят известные опечатки популярных почтовых сервисов и одноразовые домены. Адрес на таком домене получает статус bad с ответом 550 5.1.1 Email address contains a typographical error. и в аналитике задачи попадает в группу «Ошибка синтаксиса». С тем же ответом отбраковываются адреса с кириллицей или диакритикой вместо латиницы.

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

Источники

Опечатки, которые уже попали в базу, видно в отчёте. Проверьте базу в uChecker, первые 100 адресов бесплатно.

опечатки emailtypo detectionвалидация в формеЛевенштейнкачество базы

Марк Аврилов · Автор материала

Опубликовано Обновлено