Коротко. Существование почтового адреса проверяют в три шага: синтаксис (правильно ли написан), наличие у домена почтовых серверов (MX-записи в DNS) и ответ сервера на конкретный ящик (SMTP-проверка командой RCPT TO). Первые два шага дают надёжный результат за секунды; третий часто врёт — почтовые серверы намеренно отвечают «ок» на любой адрес, чтобы не сдавать спамерам список живых ящиков. Поэтому 100%-й проверки «на существование» без отправки письма не бывает — и не нужно к ней стремиться: агрессивная проверка легко приводит к попаданию вашего сервера в блэклист. Ниже — как проверить безопасно и когда это вообще нужно.
Зачем проверять адрес
Отправка на несуществующие адреса бьёт по репутации отправителя. Каждое письмо в никуда возвращается как hard bounce, а высокий процент таких возвратов почтовые системы (Gmail, Mail.ru, Яндекс) трактуют как признак спам-рассылки — и начинают отправлять уже ваши нормальные письма в спам. Поэтому чистка списка перед рассылкой — это защита доставляемости, а не придирчивость.
Проверка адреса нужна не чтобы «поймать» пользователя, а чтобы спасти собственную репутацию: один процент несуществующих адресов в рассылке дороже, чем кажется — он тянет в спам и все остальные письма.
Три уровня проверки
Уровень 1. Синтаксис
Самый дешёвый фильтр: есть ли @, допустимы ли символы, не пустой ли домен. Отсекает опечатки вроде ivan@@mail и ivan mail.ru. Но синтаксически верный адрес — ещё не существующий: nobody@example.com написан правильно, а ящика нет.
Уровень 2. MX-записи домена
Если у домена нет MX-записей (адресов почтовых серверов) — принимать почту он не может, и любой адрес на нём заведомо мёртв. Это надёжная и быстрая отсечка целых доменов. Проверить MX можно через DNS-проверку или в терминале:
dig +short MX example.com
# пусто = домен не принимает почту, все адреса на нём недоставляемы
# есть ответ (напр. "10 mx.yandex.net") = почтовый сервер существует
Как устроены MX-записи — в разборе настройки почты.
Уровень 3. SMTP-проверка (и почему она врёт)
Теоретически можно подключиться к почтовому серверу домена и спросить про конкретный ящик командой RCPT TO: сервер ответит 250 OK (адрес принят) или 550 (нет такого). На практике это самый ненадёжный шаг:
- Catch-all. Многие домены принимают письма на любой адрес и говорят «ок» даже несуществующему ящику — узнать реальность конкретного адреса нельзя.
- Антиспам-защита. Gmail, Яндекс, Mail.ru намеренно отвечают одинаково на живой и мёртвый адрес, чтобы не сливать спамерам базу.
- Грейлистинг. Сервер может временно отклонить незнакомого проверяющего (
4xx), и вы получите «непонятно» вместо ответа. - Риск для вас. Массовые SMTP-пробы с одного IP выглядят как разведка спамера — ваш адрес быстро попадёт в блэклист, и уже настоящие письма перестанут доходить.
Единственная стопроцентная проверка существования адреса — отправить на него письмо и получить (или не получить) отказ. Всё остальное — оценка вероятности, а не факт.
Как проверять безопасно
- Валидируйте на вводе. Проверяйте синтаксис + наличие MX прямо в форме подписки/регистрации — это отсекает опечатки и мёртвые домены без всякого риска.
- Double opt-in. Золотой стандарт: после подписки шлёте письмо со ссылкой подтверждения. В базу попадают только реальные, согласившиеся адреса — и существование подтверждено, и юридически чисто (152-ФЗ).
- Следите за bounce. Обрабатывайте возвраты и сразу удаляйте hard-bounce адреса из списка — это и есть «проверка существования» по факту доставки. Подробнее — в статье про обработку возвратов.
- Не гоняйте чужой сервер SMTP-пробами. Для оценки домена (принимает ли он почту вообще, нет ли проблем с SPF/DKIM/DMARC) используйте проверку email-настроек — она смотрит конфигурацию домена, а не долбит конкретный ящик.
Частые вопросы
Есть же онлайн-сервисы «проверить почту на существование». Им верить?
Они делают ровно те же три шага — синтаксис, MX, SMTP-проба — и упираются в те же ограничения: catch-all и антиспам делают ответ по крупным провайдерам недостоверным. Как быстрый фильтр опечаток и мёртвых доменов такие сервисы полезны, но «зелёная галочка» у ящика на Gmail не доказывает, что адрес живой.
Как проверить, не выдумал ли пользователь адрес при регистрации?
Только подтверждением: письмо со ссылкой активации (double opt-in). Пока пользователь не перешёл по ссылке — адрес считается неподтверждённым. Это надёжнее любой SMTP-пробы и заодно защищает от ботов и чужих адресов.
Почему письмо ушло, но «проверка» показывала, что адреса нет?
Скорее всего сработал грейлистинг или временная недоступность сервера в момент пробы — адрес живой, но на разовый запрос сервер ответил уклончиво. Ещё один довод против доверия к мгновенной SMTP-проверке.
Чеклист на память
- Три уровня: синтаксис → MX-записи домена → SMTP-проба; надёжны первые два.
- Нет MX у домена — все адреса на нём мертвы, это быстрая отсечка.
- SMTP-проба врёт: catch-all, антиспам и грейлистинг делают ответ недостоверным.
- 100%-я проверка — только реальная отправка; в базу — через double opt-in.
- Не гоняйте чужие серверы пробами — попадёте в блэклист сами.