Razones de Verificación
Referencia completa de todos los códigos reason de la API BillionVerify — qué significa cada razón y cómo actuar.
Cada resultado de verificación incluye un campo reason que explica por qué el correo electrónico recibió su estado. Use esta referencia para construir lógica de filtrado precisa, diagnosticar resultados inesperados y ajustar su estrategia de envío.
Cómo funcionan las razones
El campo reason aparece en todas las respuestas de verificación junto al campo status:
{
"email": "user@example.com",
"status": "valid",
"reason": "smtp_deliverable"
}Las razones son identificadores de cadena estables — puede usarlos directamente en reglas de filtrado o lógica condicional posterior.
Valid (Válido)
Los correos con status: "valid" están confirmados como entregables.
| Razón | Descripción |
|---|---|
smtp_deliverable | SMTP RCPT devolvió 250 OK — buzón confirmado como entregable. También se produce cuando el modo DBEB de Microsoft 365 confirma la entrega o cuando un dominio catch-all confirma adicionalmente la dirección específica. |
Invalid (Inválido)
Los correos con status: "invalid" deben eliminarse de su lista — la entrega no es posible.
| Razón | Descripción |
|---|---|
invalid_syntax | La dirección de correo falla el análisis de sintaxis — parte local malformada, dominio o falta el @. |
no_mx_records | El dominio no tiene registros MX (NXDOMAIN o resultado de búsqueda MX vacío). |
spf_reject_all | El dominio no tiene registros MX y tiene un registro SPF con -all — el dominio rechaza explícitamente todo el correo entrante. |
mailbox_not_found | SMTP 550/5xx confirmó que el buzón no existe en el servidor remoto. |
host_not_found | El nombre de host MX no respondió — host inalcanzable o inexistente. |
Unknown (Desconocido)
Los correos con status: "unknown" no pudieron verificarse de forma concluyente. Algunos son temporales (reintentables); otros representan limitaciones estructurales.
| Razón | Reintentable | Descripción |
|---|---|---|
smtp_unverifiable | No | El proveedor bloquea la verificación SMTP automatizada (Apple iCloud, Microsoft consumer, Proton, Tuta). El resultado se basa en heurísticas a nivel de dominio. |
smtp_blocked | No | El servidor SMTP remoto bloqueó o puso en lista negra explícitamente la conexión. |
smtp_eof_blocked | Sí | El MX cerró la conexión antes de enviar un banner — típicamente un limitador de velocidad por IP o una regla fail2ban. |
smtp_timeout | Sí | La operación SMTP expiró (plazo de contexto o cancelación). |
smtp_connection_failed | No | Fallo genérico de conexión SMTP — ninguna clase más específica coincidió. |
smtp_rate_limited | Sí | El servidor SMTP remoto devolvió una respuesta de límite de velocidad (421, 450, 451 o límite de mensajes excedido). |
smtp_greylisted | Sí | Respuesta genérica de greylisting detectada — reintente después de un retraso. |
mimecast_greylist | Sí | Greylisting específico de Mimecast / fallo temporal 451. |
proofpoint_ad_lookup | Sí | Búsqueda asíncrona de AD de Proofpoint en progreso (temp-fail 421 4.1.1 durante validación de destinatario). |
policy_temp_fail | Sí | Fallo temporal genérico 4xx por aplicación de política remota. |
google_rate_limit | Sí | Google MX devolvió una respuesta de límite de velocidad o rechazo temporal. |
google_dmarc_misalignment | No | La configuración DMARC del dominio está desalineada — Google rechaza según política DMARC. |
m365_ip_rep_block | Sí | Microsoft 365 rechazó la conexión debido a la reputación de IP (códigos 4.7.650 / 4.7.651). |
mailbox_full | No | El buzón existe pero está sobre cuota (SMTP 452 o respuesta de bandeja de entrada llena). |
mailbox_disabled | No | El buzón existe pero ha sido desactivado o dado de baja. |
dns_timeout | Sí | La búsqueda DNS o MX expiró — problema transitorio del resolutor. |
dns_lookup_error | Sí | La búsqueda DNS falló con un error que no es NXDOMAIN (SERVFAIL, tiempo de espera UDP o error del resolutor). |
yahoo_api_verified | No | La API de Registro de Yahoo confirmó que la dirección es entregable (ruta de lote). |
yahoo_api_not_deliverable | No | La API de Registro de Yahoo confirmó que la dirección no es entregable (ruta de lote). |
yahoo_api_error | Sí | La llamada a la API de Registro de Yahoo falló — error general. |
yahoo_api_unavailable | Sí | La API de Registro de Yahoo no estaba disponible (fallo de salud a nivel de lote). |
yahoo_api_eof | Sí | La API de Yahoo devolvió EOF anticipado — caída transitoria de TCP/TLS. |
yahoo_api_unavailable_after_fallback | Sí | La API de Yahoo falló y el fallback SMTP también falló. |
carrier_blocked | No | Dominio de operador japonés (docomo.ne.jp, au.com, etc.) — SMTP está bloqueado por política del operador. |
internal_verifier_error | Sí | Error interno del verificador no clasificado — fallo transitorio. |
rate_limited | Sí | El correo fue limitado en velocidad durante el procesamiento por lotes (alias de smtp_rate_limited en trabajos de archivo). |
bucket_default_skip_smtp_unknown | No | El modo de verificación a nivel de cuenta está configurado para omitir SMTP — el resultado se basa solo en verificaciones de dominio. |
Risky (Arriesgado)
Los correos con status: "risky" tienen un riesgo de entrega moderado.
| Razón | Reintentable | Descripción |
|---|---|---|
mx_only_verification_semaphore_timeout | Sí | El semáforo de concurrencia SMTP expiró — el fallback solo-MX confirmó registros MX válidos pero el buzón no pudo verificarse individualmente. |
Catch-all
Los correos con status: "catchall" pertenecen a dominios que aceptan correo para todas las direcciones. La entregabilidad individual no puede confirmarse.
| Razón | Descripción |
|---|---|
catch_all_domain | Dominio confirmado como catch-all — sonda RCPT aleatoria aceptada por el servidor de correo. |
catch_all_deliverable | Dominio catch-all, y la dirección específica también devolvió 250 OK en RCPT. |
catch_all_inferred | Estado catch-all inferido de evidencia en caché (indirecto, no una sonda en vivo). |
m365_internal_relay | Dominio de Microsoft 365 configurado como retransmisión interna — todos los RCPT aceptados pero no verificados individualmente. |
gateway_accept_all | La puerta de enlace de seguridad (Mimecast, Proofpoint, etc.) está en modo accept-all. |
forwarding_alias | Servicio de alias de reenvío de correo (SimpleLogin, Firefox Relay, Duck.com). |
region_consumer_accept_all | Dominio de consumidor regional (p. ej. naver.com, daum.net) conocido por aceptar todo el correo entrante — se omite la sonda SMTP. |
bucket_default_skip_smtp_catchall | El modo de verificación a nivel de cuenta está configurado para omitir la detección catch-all de SMTP. |
Role (Dirección de rol)
Los correos con status: "role" pertenecen a bandejas de entrada compartidas (p. ej. info@, support@, noreply@). Estas direcciones son típicamente entregables pero tienen baja tasa de interacción.
Las direcciones de rol heredan el reason de su verificación SMTP subyacente — no existen códigos de razón dedicados para este estado. Por ejemplo, una dirección de rol que pasa SMTP mostrará reason: "smtp_deliverable".
Disposable (Desechable)
Los correos con status: "disposable" pertenecen a servicios de correo temporal. Aceptar estos generalmente conduce a registros de baja calidad.
| Razón | Descripción |
|---|---|
disposable_domain | El dominio está listado como proveedor de correo desechable / temporal conocido. |
Usando razones en el filtrado
Puede combinar status y reason para una segmentación precisa de listas. Por ejemplo, para mantener correos unknown que solo son desconocidos debido a problemas temporales:
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);
}