Коды причин верификации
Полный справочник всех кодов reason, возвращаемых API BillionVerify — значение каждого кода и рекомендуемые действия.
Каждый результат верификации содержит поле reason, объясняющее, почему адрес электронной почты получил свой статус. Используйте этот справочник для построения точной логики фильтрации, диагностики неожиданных результатов и оптимизации стратегии рассылки.
Как работают причины
Поле reason присутствует во всех ответах верификации рядом с полем status:
{
"email": "user@example.com",
"status": "valid",
"reason": "smtp_deliverable"
}Коды причин — это стабильные строковые идентификаторы, которые можно использовать напрямую в правилах фильтрации или условной логике.
Valid (Действительный)
Письма со status: "valid" подтверждены как доставляемые.
| Причина | Описание |
|---|---|
smtp_deliverable | SMTP RCPT вернул 250 OK — почтовый ящик подтверждён как доставляемый. Также используется, когда режим DBEB Microsoft 365 подтверждает доставку или когда домен catch-all дополнительно подтверждает конкретный адрес. |
Invalid (Недействительный)
Письма со status: "invalid" следует удалить из списка — доставка невозможна.
| Причина | Описание |
|---|---|
invalid_syntax | Адрес электронной почты не прошёл синтаксический анализ — некорректная локальная часть, домен или отсутствует @. |
no_mx_records | У домена нет MX-записей (NXDOMAIN или пустой результат запроса MX). |
spf_reject_all | У домена нет MX-записей и есть SPF-запись с -all — домен явно отклоняет всю входящую почту. |
mailbox_not_found | SMTP 550/5xx подтвердил, что почтовый ящик не существует на удалённом сервере. |
host_not_found | MX-хост не ответил — хост недоступен или не существует. |
Unknown (Неизвестный)
Письма со status: "unknown" не удалось верифицировать окончательно. Некоторые носят временный характер (можно повторить попытку); другие представляют структурные ограничения.
| Причина | Повторная попытка | Описание |
|---|---|---|
smtp_unverifiable | Нет | Провайдер блокирует автоматизированную SMTP-верификацию (Apple iCloud, Microsoft consumer, Proton, Tuta). Результат основан на эвристике уровня домена. |
smtp_blocked | Нет | Удалённый SMTP-сервер явно заблокировал или внёс соединение в чёрный список. |
smtp_eof_blocked | Да | MX закрыл соединение до отправки баннера — как правило, ограничитель скорости по IP или правило fail2ban. |
smtp_timeout | Да | Операция SMTP завершилась по таймауту (дедлайн контекста или отмена). |
smtp_connection_failed | Нет | Общая ошибка соединения SMTP — нет более специфичного совпадения. |
smtp_rate_limited | Да | Удалённый SMTP-сервер вернул ответ об ограничении скорости (421, 450, 451 или превышен лимит сообщений). |
smtp_greylisted | Да | Обнаружен общий ответ грейлистинга — повторите попытку после задержки. |
mimecast_greylist | Да | Грейлистинг Mimecast / временный сбой 451. |
proofpoint_ad_lookup | Да | Выполняется асинхронный поиск AD Proofpoint (временный сбой 421 4.1.1 при проверке получателя). |
policy_temp_fail | Да | Общий временный сбой 4xx из-за применения удалённой политики. |
google_rate_limit | Да | Google MX вернул ответ об ограничении скорости или временного отклонения. |
google_dmarc_misalignment | Нет | Конфигурация DMARC домена не согласована — Google отклоняет согласно политике DMARC. |
m365_ip_rep_block | Да | Microsoft 365 отклонил соединение из-за репутации IP (коды 4.7.650 / 4.7.651). |
mailbox_full | Нет | Почтовый ящик существует, но превышен квота (SMTP 452 или ответ о заполненном ящике). |
mailbox_disabled | Нет | Почтовый ящик существует, но отключён или деактивирован. |
dns_timeout | Да | Запрос DNS или MX завершился по таймауту — временная проблема резолвера. |
dns_lookup_error | Да | Запрос DNS завершился ошибкой, отличной от NXDOMAIN (SERVFAIL, таймаут UDP или ошибка резолвера). |
yahoo_api_verified | Нет | API регистрации Yahoo подтвердил доставляемость адреса (пакетный путь). |
yahoo_api_not_deliverable | Нет | API регистрации Yahoo подтвердил, что адрес недоставляем (пакетный путь). |
yahoo_api_error | Да | Вызов API регистрации Yahoo завершился ошибкой — общая ошибка. |
yahoo_api_unavailable | Да | API регистрации Yahoo был недоступен (сбой работоспособности на уровне пакета). |
yahoo_api_eof | Да | API Yahoo вернул ранний EOF — временный разрыв TCP/TLS. |
yahoo_api_unavailable_after_fallback | Да | API Yahoo завершился ошибкой и резервный SMTP также завершился ошибкой. |
carrier_blocked | Нет | Домен японского оператора (docomo.ne.jp, au.com и т.д.) — SMTP заблокирован политикой оператора. |
internal_verifier_error | Да | Неклассифицированная внутренняя ошибка верификатора — временный сбой. |
rate_limited | Да | Письмо было ограничено по скорости при пакетной обработке (псевдоним smtp_rate_limited в файловых заданиях). |
bucket_default_skip_smtp_unknown | Нет | Режим верификации на уровне аккаунта настроен на пропуск SMTP — результат основан только на проверках домена. |
Risky (Рискованный)
Письма со status: "risky" имеют умеренный риск доставляемости.
| Причина | Повторная попытка | Описание |
|---|---|---|
mx_only_verification_semaphore_timeout | Да | Таймаут семафора параллелизма SMTP — резервная верификация только по MX подтвердила валидные MX-записи, но почтовый ящик не удалось верифицировать индивидуально. |
Catch-all (Ловит всё)
Письма со status: "catchall" принадлежат доменам, принимающим почту для всех адресов. Индивидуальную доставляемость подтвердить невозможно.
| Причина | Описание |
|---|---|
catch_all_domain | Домен подтверждён как catch-all — случайный RCPT-зонд принят почтовым сервером. |
catch_all_deliverable | Домен catch-all, и конкретный адрес также вернул 250 OK на RCPT. |
catch_all_inferred | Статус catch-all выведен из кэшированных данных (косвенно, не живой зонд). |
m365_internal_relay | Домен Microsoft 365 настроен как внутреннее реле — все RCPT принимаются, но не верифицируются индивидуально. |
gateway_accept_all | Шлюз безопасности (Mimecast, Proofpoint и т.д.) в режиме accept-all. |
forwarding_alias | Сервис псевдонимов переадресации почты (SimpleLogin, Firefox Relay, Duck.com). |
region_consumer_accept_all | Региональный потребительский домен (например, naver.com, daum.net), известный тем, что принимает всю входящую почту — SMTP-зонд пропускается. |
bucket_default_skip_smtp_catchall | Режим верификации на уровне аккаунта настроен на пропуск обнаружения catch-all SMTP. |
Role (Ролевой адрес)
Письма со status: "role" принадлежат общим почтовым ящикам (например, info@, support@, noreply@). Эти адреса обычно доставляемы, но имеют низкую вовлечённость.
Ролевые адреса наследуют reason от базовой проверки SMTP — для этого статуса нет специальных кодов причин. Например, ролевой адрес, прошедший SMTP, покажет reason: "smtp_deliverable".
Disposable (Одноразовый)
Письма со status: "disposable" принадлежат временным сервисам электронной почты. Принятие таких адресов обычно приводит к регистрациям низкого качества.
| Причина | Описание |
|---|---|
disposable_domain | Домен числится как известный поставщик одноразовой / временной электронной почты. |
Использование причин при фильтрации
Вы можете комбинировать status и reason для точной сегментации списка. Например, чтобы сохранить письма unknown, которые являются неизвестными только из-за временных проблем:
function isRetryableUnknown(result) {
const retryableReasons = new Set([
'smtp_eof_blocked', 'smtp_timeout', 'smtp_rate_limited',
'smtp_greylisted', 'mimecast_greylist', 'proofpoint_ad_lookup',
'policy_temp_fail', 'google_rate_limit', 'm365_ip_rep_block',
'dns_timeout', 'dns_lookup_error', 'yahoo_api_error',
'yahoo_api_unavailable', 'yahoo_api_eof',
'yahoo_api_unavailable_after_fallback', 'internal_verifier_error',
'rate_limited', 'mx_only_verification_semaphore_timeout',
]);
return result.status === 'unknown' && retryableReasons.has(result.reason);
}