Raisons de vérification
Référence complète de tous les codes reason retournés par l'API BillionVerify — signification et actions recommandées pour chaque code.
Chaque résultat de vérification inclut un champ reason qui explique pourquoi l'e-mail a reçu son statut. Utilisez cette référence pour construire une logique de filtrage précise, diagnostiquer des résultats inattendus et optimiser votre stratégie d'envoi.
Fonctionnement des raisons
Le champ reason apparaît dans toutes les réponses de vérification aux côtés du champ status :
{
"email": "user@example.com",
"status": "valid",
"reason": "smtp_deliverable"
}Les raisons sont des identifiants de chaîne stables — vous pouvez les utiliser directement dans des règles de filtrage ou une logique conditionnelle en aval.
Valid (Valide)
Les e-mails avec status: "valid" sont confirmés livrables.
| Raison | Description |
|---|---|
smtp_deliverable | SMTP RCPT a retourné 250 OK — boîte aux lettres confirmée livrable. Également produit lorsque le mode DBEB de Microsoft 365 confirme la livraison ou lorsqu'un domaine catch-all confirme également l'adresse spécifique. |
Invalid (Invalide)
Les e-mails avec status: "invalid" doivent être supprimés de votre liste — la livraison n'est pas possible.
| Raison | Description |
|---|---|
invalid_syntax | L'adresse e-mail échoue à l'analyse syntaxique — partie locale malformée, domaine ou @ manquant. |
no_mx_records | Le domaine n'a pas d'enregistrements MX (NXDOMAIN ou résultat de recherche MX vide). |
spf_reject_all | Le domaine n'a pas d'enregistrements MX et un enregistrement SPF avec -all — le domaine rejette explicitement tout courrier entrant. |
mailbox_not_found | SMTP 550/5xx a confirmé que la boîte aux lettres n'existe pas sur le serveur distant. |
host_not_found | Le nom d'hôte MX n'a pas répondu — hôte inaccessible ou inexistant. |
Unknown (Inconnu)
Les e-mails avec status: "unknown" n'ont pas pu être vérifiés de manière concluante. Certains sont temporaires (récupérables) ; d'autres représentent des limitations structurelles.
| Raison | Récupérable | Description |
|---|---|---|
smtp_unverifiable | Non | Le fournisseur bloque la vérification SMTP automatisée (Apple iCloud, Microsoft consumer, Proton, Tuta). Le résultat est basé sur des heuristiques au niveau du domaine. |
smtp_blocked | Non | Le serveur SMTP distant a explicitement bloqué ou mis sur liste noire la connexion. |
smtp_eof_blocked | Oui | Le MX a fermé la connexion avant d'envoyer une bannière — généralement un limiteur de débit par IP ou une règle fail2ban. |
smtp_timeout | Oui | L'opération SMTP a expiré (délai de contexte ou annulation). |
smtp_connection_failed | Non | Échec générique de connexion SMTP — aucune classe plus spécifique ne correspond. |
smtp_rate_limited | Oui | Le serveur SMTP distant a retourné une réponse de limite de débit (421, 450, 451 ou limite de messages dépassée). |
smtp_greylisted | Oui | Réponse générique de greylisting détectée — réessayez après un délai. |
mimecast_greylist | Oui | Greylisting spécifique à Mimecast / échec temporaire 451. |
proofpoint_ad_lookup | Oui | Recherche asynchrone AD Proofpoint en cours (temp-fail 421 4.1.1 pendant la validation du destinataire). |
policy_temp_fail | Oui | Échec temporaire générique 4xx dû à l'application de politique distante. |
google_rate_limit | Oui | Google MX a retourné une réponse de limite de débit ou de rejet temporaire. |
google_dmarc_misalignment | Non | La configuration DMARC du domaine est mal alignée — Google rejette selon la politique DMARC. |
m365_ip_rep_block | Oui | Microsoft 365 a rejeté la connexion en raison de la réputation IP (codes 4.7.650 / 4.7.651). |
mailbox_full | Non | La boîte aux lettres existe mais dépasse le quota (SMTP 452 ou réponse de boîte de réception pleine). |
mailbox_disabled | Non | La boîte aux lettres existe mais a été désactivée ou désactivée. |
dns_timeout | Oui | La recherche DNS ou MX a expiré — problème transitoire du résolveur. |
dns_lookup_error | Oui | La recherche DNS a échoué avec une erreur non-NXDOMAIN (SERVFAIL, délai UDP ou erreur de résolveur). |
yahoo_api_verified | Non | L'API d'inscription Yahoo a confirmé que l'adresse est livrable (chemin batch). |
yahoo_api_not_deliverable | Non | L'API d'inscription Yahoo a confirmé que l'adresse n'est pas livrable (chemin batch). |
yahoo_api_error | Oui | L'appel à l'API d'inscription Yahoo a échoué — erreur générale. |
yahoo_api_unavailable | Oui | L'API d'inscription Yahoo était indisponible (échec de santé au niveau du batch). |
yahoo_api_eof | Oui | L'API Yahoo a retourné un EOF prématuré — coupure TCP/TLS transitoire. |
yahoo_api_unavailable_after_fallback | Oui | L'API Yahoo a échoué et le fallback SMTP a également échoué. |
carrier_blocked | Non | Domaine d'opérateur japonais (docomo.ne.jp, au.com, etc.) — SMTP est bloqué par la politique de l'opérateur. |
internal_verifier_error | Oui | Erreur interne du vérificateur non classifiée — panne transitoire. |
rate_limited | Oui | L'e-mail a été limité en débit pendant le traitement par lots (alias de smtp_rate_limited dans les jobs de fichiers). |
bucket_default_skip_smtp_unknown | Non | Le mode de vérification au niveau du compte est configuré pour ignorer SMTP — le résultat est basé uniquement sur les vérifications de domaine. |
Risky (Risqué)
Les e-mails avec status: "risky" ont un risque de délivrabilité modéré.
| Raison | Récupérable | Description |
|---|---|---|
mx_only_verification_semaphore_timeout | Oui | Le sémaphore de concurrence SMTP a expiré — le fallback MX-only a confirmé des enregistrements MX valides mais la boîte aux lettres n'a pas pu être vérifiée individuellement. |
Catch-all
Les e-mails avec status: "catchall" appartiennent à des domaines qui acceptent le courrier pour toutes les adresses. La délivrabilité individuelle ne peut pas être confirmée.
| Raison | Description |
|---|---|
catch_all_domain | Domaine confirmé comme catch-all — sonde RCPT aléatoire acceptée par le serveur de messagerie. |
catch_all_deliverable | Domaine catch-all, et l'adresse spécifique a également retourné 250 OK sur RCPT. |
catch_all_inferred | Statut catch-all inféré à partir d'évidences en cache (indirect, pas une sonde en direct). |
m365_internal_relay | Domaine Microsoft 365 configuré comme relais interne — tous les RCPT acceptés mais non vérifiés individuellement. |
gateway_accept_all | La passerelle de sécurité (Mimecast, Proofpoint, etc.) est en mode accept-all. |
forwarding_alias | Service d'alias de transfert d'e-mail (SimpleLogin, Firefox Relay, Duck.com). |
region_consumer_accept_all | Domaine de consommateur régional (p. ex. naver.com, daum.net) connu pour accepter tout le courrier entrant — la sonde SMTP est ignorée. |
bucket_default_skip_smtp_catchall | Le mode de vérification au niveau du compte est configuré pour ignorer la détection catch-all SMTP. |
Role (Adresse de rôle)
Les e-mails avec status: "role" appartiennent à des boîtes de réception partagées (p. ex. info@, support@, noreply@). Ces adresses sont généralement livrables mais ont un faible taux d'engagement.
Les adresses de rôle héritent du reason de leur vérification SMTP sous-jacente — aucun code de raison dédié n'existe pour ce statut. Par exemple, une adresse de rôle qui réussit SMTP affichera reason: "smtp_deliverable".
Disposable (Jetable)
Les e-mails avec status: "disposable" appartiennent à des services de messagerie temporaire. Accepter ceux-ci conduit généralement à des inscriptions de mauvaise qualité.
| Raison | Description |
|---|---|
disposable_domain | Le domaine est répertorié comme fournisseur de messagerie jetable / temporaire connu. |
Utiliser les raisons dans le filtrage
Vous pouvez combiner status et reason pour une segmentation précise des listes. Par exemple, pour conserver les e-mails unknown qui ne sont inconnus qu'en raison de problèmes temporaires :
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);
}