Существует ли почта: как проверить адрес на существование
Вопрос звучит просто, а ответить на него, глядя на сам адрес, невозможно. Правильно написанный адрес и работающий адрес это разные вещи. Разбираем, у кого и как об этом спрашивают, почему часть адресов остаётся без однозначного ответа и что проверка не покажет никогда.
Правильно написанный адрес и рабочий адрес — разные вещи
Посмотреть на адрес и понять, существует ли он, нельзя. Строка petrov@gmial.com выглядит безупречно: собака на месте, точка на месте, запрещённых символов нет. Только домена gmial.com не существует, и письмо туда не уйдёт никогда.
Поэтому проверка синтаксиса отвечает лишь на вопрос, можно ли такой адрес вообще записать. Существует ли за ним живой ящик, знает только почтовый сервер, который этот домен обслуживает. У него и надо спрашивать.
Как это спрашивают у сервера
Порядок из трёх шагов, и каждый следующий имеет смысл только после предыдущего.
Синтаксис. Соответствует ли запись правилам RFC 5322. Отсекает пробелы, две точки подряд, кириллические буквы, подставленные вместо латинских, домен без точки. Занимает доли миллисекунды и выбрасывает заметную часть мусора.
MX-записи домена. Есть ли у домена почтовый сервер вообще. Нет MX и нет A-записи, значит домен почту не принимает, и дальше идти незачем. Здесь отваливаются опечатки в домене и адреса на доменах, срок которых истёк.
SMTP-диалог. Соединение с почтовым сервером домена и вопрос про конкретный ящик. Сервер отвечает, принимает ли он почту на этот адрес. Диалог обрывается до передачи содержимого, поэтому владелец ящика ничего не получает и о проверке не узнаёт.
HELO example.com MAIL FROM:<check@example.com> RCPT TO:<ivan@company.ru> ← вот здесь сервер и отвечает QUIT ← письмо не отправляется
Ответ 250 означает, что сервер готов принять почту на этот адрес. Ответ 550 означает, что ящика нет. Разбор остальных вариантов лежит в статье про ошибку 550.
Когда однозначного ответа не будет
Часть серверов настроена так, что отвечает согласием на любой адрес в своём домене, даже на несуществующий. Это называется catch-all, или accept-all. Внешняя проверка тут бессильна: сервер говорит «принимаю» и на живой ящик, и на выдуманный.
Ещё бывает грейлистинг, когда сервер отклоняет первое соединение от незнакомого отправителя и ждёт повторной попытки. И ограничение скорости, когда крупный провайдер придерживает частые запросы с одного адреса.
Честный валидатор в таких случаях не врёт, а выносит адрес в отдельную группу. В uChecker она называется unknown: это адреса, про которые сервер ответа не дал. В расширенном статусе рядом стоит пометка риска, и денег за такие проверки мы не берём.
Провайдеры отвечают по-разному
Gmail на вопрос про конкретный ящик отвечает прямо, поэтому адреса на gmail.com проверяются надёжно. При частых запросах включается ограничение скорости, и хороший валидатор делает паузы, а не бьётся в закрытую дверь.
Mail.ru и домены-спутники bk.ru, list.ru, inbox.ru тоже отвечают, но строже относятся к репутации проверяющего сервера. Проверка с плохого IP просто не состоится.
Яндекс отвечает, но чаще прочих уходит в грейлистинг. Поэтому проверка адреса на yandex.ru иногда требует повтора через несколько минут.
Корпоративные серверы ведут себя как угодно. Именно среди них больше всего catch-all, и именно поэтому в B2B-базах доля неопределённых адресов выше, чем в розничных.
Один адрес или список
Если проверить надо один адрес, хватит формы на главной: вводите и получаете ответ за секунды. Если адресов тысячи, нужен пакетный прогон, потому что вручную это не делается, а отправлять письма ради проверки нельзя: каждый возврат бьёт по репутации домена.
Отдельный случай это проверка в момент ввода. Форма регистрации спрашивает у валидатора прямо во время заполнения и не принимает адрес, которого не существует. Так опечатки не попадают в базу вообще, и чистить потом нечего.
Чего проверка не покажет
Она не скажет, читает ли человек этот ящик. Адрес может существовать и принимать почту, а владелец не заходил туда два года. Такие адреса живые технически и мёртвые по сути, и отделяются они только по истории реакций, а не проверкой.
Она не скажет, чей это адрес. И не скажет, дойдёт ли до него ваше письмо: существование ящика это только первое условие, дальше идут репутация домена, аутентификация и содержание. Проверить вторую половину можно проверкой почтового домена.
Проверить адрес на существование
Форма спрашивает у почтового сервера напрямую и отвечает за секунды. Письмо при этом не отправляется, владелец ящика о проверке не узнаёт.
Проверить почту в uChecker, первые 100 адресов бесплатно. Список загружается файлом, на выходе разбивка на валидные, невалидные и неопределённые.
