Verifikationsgründe
Vollständige Referenz aller reason-Codes der BillionVerify API — Bedeutung und Handlungsempfehlung für jeden Code.
Jedes Verifikationsergebnis enthält ein reason-Feld, das erklärt, warum die E-Mail-Adresse ihren Status erhalten hat. Nutzen Sie diese Referenz, um präzise Filterregeln zu erstellen, unerwartete Ergebnisse zu diagnostizieren und Ihre Versandstrategie zu optimieren.
Funktionsweise der Gründe
Das reason-Feld erscheint in allen Verifikationsantworten neben dem status-Feld:
{
"email": "user@example.com",
"status": "valid",
"reason": "smtp_deliverable"
}Gründe sind stabile String-Bezeichner — Sie können sie direkt in Filterregeln oder nachgelagerten Bedingungslogiken verwenden.
Valid (Gültig)
E-Mails mit status: "valid" sind bestätigt zustellbar.
| Grund | Beschreibung |
|---|---|
smtp_deliverable | SMTP RCPT hat 250 OK zurückgegeben — Postfach bestätigt zustellbar. Wird auch verwendet, wenn Microsoft 365 DBEB-Modus die Zustellung bestätigt oder ein Catch-all-Domain die spezifische Adresse zusätzlich bestätigt. |
Invalid (Ungültig)
E-Mails mit status: "invalid" sollten aus Ihrer Liste entfernt werden — Zustellung ist nicht möglich.
| Grund | Beschreibung |
|---|---|
invalid_syntax | Die E-Mail-Adresse schlägt bei der Syntaxprüfung fehl — fehlerhafter lokaler Teil, Domain oder fehlendes @. |
no_mx_records | Die Domain hat keine MX-Einträge (NXDOMAIN oder leeres MX-Lookup-Ergebnis). |
spf_reject_all | Die Domain hat keine MX-Einträge und einen SPF-Eintrag mit -all — die Domain lehnt explizit alle eingehenden E-Mails ab. |
mailbox_not_found | SMTP 550/5xx bestätigt, dass das Postfach auf dem Remote-Server nicht existiert. |
host_not_found | Der MX-Hostname hat nicht geantwortet — Host nicht erreichbar oder nicht vorhanden. |
Unknown (Unbekannt)
E-Mails mit status: "unknown" konnten nicht abschließend verifiziert werden. Einige davon sind temporär (wiederholbar); andere stellen strukturelle Einschränkungen dar.
| Grund | Wiederholbar | Beschreibung |
|---|---|---|
smtp_unverifiable | Nein | Der Anbieter blockiert automatisierte SMTP-Verifizierung (Apple iCloud, Microsoft Consumer, Proton, Tuta). Ergebnis basiert auf Domain-Level-Heuristik. |
smtp_blocked | Nein | Der Remote-SMTP-Server hat die Verbindung explizit blockiert oder gesperrt. |
smtp_eof_blocked | Ja | Der MX hat die Verbindung vor dem Senden eines Banners geschlossen — typischerweise ein IP-Rate-Limiter oder eine fail2ban-Regel. |
smtp_timeout | Ja | SMTP-Vorgang hat das Zeitlimit überschritten (Context-Deadline oder Abbruch). |
smtp_connection_failed | Nein | Allgemeiner SMTP-Verbindungsfehler — keine spezifischere Klasse zutreffend. |
smtp_rate_limited | Ja | Der Remote-SMTP-Server hat eine Rate-Limit-Antwort zurückgegeben (421, 450, 451 oder Nachrichtenlimit überschritten). |
smtp_greylisted | Ja | Allgemeine Greylisting-Antwort erkannt — nach einer Verzögerung erneut versuchen. |
mimecast_greylist | Ja | Mimecast-spezifisches Greylisting / 451 temporärer Fehler. |
proofpoint_ad_lookup | Ja | Proofpoint AD async Lookup in Bearbeitung (421 4.1.1 temp-fail während der Empfängervalidierung). |
policy_temp_fail | Ja | Allgemeiner 4xx temporärer Fehler durch Remote-Richtliniendurchsetzung. |
google_rate_limit | Ja | Google MX hat eine Rate-Limit- oder temporäre Ablehnungsantwort zurückgegeben. |
google_dmarc_misalignment | Nein | Domain-DMARC-Konfiguration ist nicht ausgerichtet — Google lehnt basierend auf DMARC-Richtlinie ab. |
m365_ip_rep_block | Ja | Microsoft 365 hat die Verbindung aufgrund von IP-Reputation abgelehnt (4.7.650 / 4.7.651 Codes). |
mailbox_full | Nein | Postfach existiert, ist aber über dem Kontingent (SMTP 452 oder Vollpostfach-Antwort). |
mailbox_disabled | Nein | Postfach existiert, ist aber deaktiviert oder inaktiviert. |
dns_timeout | Ja | DNS- oder MX-Lookup hat das Zeitlimit überschritten — vorübergehendes Resolver-Problem. |
dns_lookup_error | Ja | DNS-Lookup fehlgeschlagen mit Nicht-NXDOMAIN-Fehler (SERVFAIL, UDP-Timeout oder Resolver-Fehler). |
yahoo_api_verified | Nein | Yahoo Registration API hat bestätigt, dass die Adresse zustellbar ist (Batch-Pfad). |
yahoo_api_not_deliverable | Nein | Yahoo Registration API hat bestätigt, dass die Adresse nicht zustellbar ist (Batch-Pfad). |
yahoo_api_error | Ja | Yahoo Registration API-Aufruf fehlgeschlagen — allgemeiner Fehler. |
yahoo_api_unavailable | Ja | Yahoo Registration API war nicht verfügbar (Batch-Level-Health-Fehler). |
yahoo_api_eof | Ja | Yahoo API hat frühzeitiges EOF zurückgegeben — vorübergehender TCP/TLS-Abbruch. |
yahoo_api_unavailable_after_fallback | Ja | Yahoo API fehlgeschlagen und SMTP-Fallback ebenfalls fehlgeschlagen. |
carrier_blocked | Nein | Japanische Carrier-Domain (docomo.ne.jp, au.com usw.) — SMTP wird durch Carrier-Richtlinie blockiert. |
internal_verifier_error | Ja | Nicht klassifizierter interner Verifikationsfehler — vorübergehender Ausfall. |
rate_limited | Ja | E-Mail wurde während der Stapelverarbeitung ratenbegrenzt (Alias für smtp_rate_limited in Datei-Jobs). |
bucket_default_skip_smtp_unknown | Nein | Kontoweiter Verifizierungsmodus ist auf SMTP überspringen eingestellt — Ergebnis basiert nur auf Domain-Prüfungen. |
Risky (Risikoreich)
E-Mails mit status: "risky" haben ein moderates Zustellbarkeitsrisiko.
| Grund | Wiederholbar | Beschreibung |
|---|---|---|
mx_only_verification_semaphore_timeout | Ja | SMTP-Gleichzeitigkeitssemaphor hat das Zeitlimit überschritten — MX-Only-Fallback hat gültige MX-Einträge bestätigt, aber das Postfach konnte nicht einzeln verifiziert werden. |
Catch-all
E-Mails mit status: "catchall" gehören zu Domains, die E-Mails für alle Adressen akzeptieren. Individuelle Zustellbarkeit kann nicht bestätigt werden.
| Grund | Beschreibung |
|---|---|
catch_all_domain | Domain als Catch-all bestätigt — zufällige RCPT-Anfrage vom Mailserver akzeptiert. |
catch_all_deliverable | Catch-all-Domain, und die spezifische Adresse hat auch 250 OK bei RCPT zurückgegeben. |
catch_all_inferred | Catch-all-Status aus gecachten Beweisen abgeleitet (indirekt, keine Live-Anfrage). |
m365_internal_relay | Microsoft 365-Domain als internes Relay konfiguriert — alle RCPT akzeptiert, aber nicht einzeln verifiziert. |
gateway_accept_all | Sicherheitsgateway (Mimecast, Proofpoint usw.) im Accept-all-Modus. |
forwarding_alias | E-Mail-Weiterleitungs-Alias-Dienst (SimpleLogin, Firefox Relay, Duck.com). |
region_consumer_accept_all | Regionale Consumer-Domain (z.B. naver.com, daum.net), die bekanntermaßen alle eingehenden E-Mails akzeptiert — SMTP-Anfrage wird übersprungen. |
bucket_default_skip_smtp_catchall | Kontoweiter Verifizierungsmodus ist auf SMTP Catch-all-Erkennung überspringen eingestellt. |
Role (Rollenadresse)
E-Mails mit status: "role" gehören zu gemeinsamen Postfächern (z.B. info@, support@, noreply@). Diese Adressen sind typischerweise zustellbar, haben aber geringe Interaktionsraten.
Rollenadressen erben den reason von ihrer zugrunde liegenden SMTP-Prüfung — für diesen Status existieren keine dedizierten Grundcodes. Zum Beispiel zeigt eine Rollenadresse, die die SMTP-Prüfung besteht, reason: "smtp_deliverable".
Disposable (Wegwerfadresse)
E-Mails mit status: "disposable" gehören zu temporären E-Mail-Diensten. Die Akzeptanz dieser Adressen führt typischerweise zu minderwertigen Anmeldungen.
| Grund | Beschreibung |
|---|---|
disposable_domain | Domain ist als bekannter Wegwerf-/temporärer E-Mail-Anbieter gelistet. |
Gründe beim Filtern verwenden
Sie können status und reason für präzise Listensegmentierung kombinieren. Zum Beispiel, um unknown-E-Mails zu behalten, die nur aufgrund temporärer Probleme unbekannt sind:
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);
}