Eine Catch-all-E-Mail-Domain nimmt E-Mails für jede Adresse dieser Domain an: anna@, sales@ und xk29qz@ bekommen von ihrem Mailserver alle dasselbe 250 OK, ob das Postfach existiert oder nicht. Für die Firma, die sie betreibt, ist das bequem, für alle, die vor dem Versand wissen wollen, ob eine Adresse echt ist, ein Problem. Diese Anleitung erklärt, wie Catch-all-Domains funktionieren, wie Prüfdienste sie erkennen, was die API von emailvalidation.io für sie liefert und wie Sie in einer Liste mit ihnen umgehen.
Was ist eine Catch-all-Domain?
Ein Mailserver lehnt E-Mails an eine unbekannte Adresse normalerweise ab, mit einer Antwort 550 5.1.1 im SMTP-Gespräch. Ein Catch-all-Server nimmt sie stattdessen an und stellt sie in ein dafür bestimmtes Postfach zu, das Catch-all-Postfach, oder sortiert sie später aus.
Firmen richten das aus mehreren Gründen ein:
- Falsch geschriebene Namen kommen trotzdem an. Eine E-Mail an
jon.smith@stattjohn.smith@landet im Catch-all-Postfach, statt an einen Kunden zurückzugehen. - Ehemalige Mitarbeitende. E-Mails an sie kommen weiter an und lassen sich umleiten.
- Voreinstellungen. Manche Hosting- und Mail-Konfigurationen nehmen alles für eine Domain an, bis jemand das ändert, und manche vorgeschalteten Filterdienste nehmen alle Empfänger an und prüfen sie erst später.
In Google Workspace etwa kann ein Administrator „alle inaktiven und nicht erkannten Konten“ an einen Nutzer oder eine Gruppe weiterleiten (Google-Workspace-Hilfe). Von außen sehen alle diese Domains gleich aus: Der Server sagt zu jedem Empfänger Ja.
Catch-all-Konfigurationen finden sich auf Domains von Firmen und Organisationen. Große Anbieter für Privatkunden wie Gmail, Yahoo und Outlook.com prüfen jedes Postfach und lehnen unbekannte Adressen ab, ihre Adressen lassen sich also einzeln prüfen.
Warum sich eine Catch-all-Adresse nicht prüfen lässt
Eine E-Mail-Prüfung fragt den Mailserver des Empfängers, ob er einen Empfänger annehmen würde, und trennt die Verbindung, bevor eine Nachricht gesendet wird (die Schritte stehen unter Prüfen, ob eine E-Mail-Adresse existiert). Bei einer normalen Domain trennt die Antwort echte von erfundenen Adressen. Bei einer Catch-all-Domain bekommen beide dieselbe Antwort:
C: MAIL FROM:<check@verifier.example>
S: 250 OK
C: RCPT TO:<anna.berg@company.example>
S: 250 OK ← angenommen
C: RCPT TO:<x7q2k9zj4w@company.example>
S: 250 OK ← ebenfalls angenommen: die Domain ist Catch-all
C: QUIT
Das 250 für anna.berg@ beweist nichts über Anna. Eine E-Mail an diese Adresse kann:
- Anna erreichen, weil das Postfach existiert;
- in einem gemeinsamen Catch-all-Postfach landen, das jemand liest oder niemand;
- jetzt angenommen werden und später zurückkommen, wenn ein Server hinter dem Gateway keinen solchen Nutzer findet. Ein Bounce nach der Annahme kommt als eigene Nachricht zurück und zählt wie jeder andere zu Ihrer Bounce-Rate.
Deshalb führen Prüfdienste diese Adressen in einer eigenen Kategorie, statt sie gültig oder ungültig zu nennen.
Wie die Catch-all-Erkennung funktioniert
Der Test ist der aus dem Protokoll oben: Nach der echten Adresse fragt der Prüfdienst nach einer Adresse, die es nicht geben kann, etwa einer langen Zufallszeichenfolge. Nimmt der Server auch sie an, ist die Domain Catch-all.
Zwei Dinge können das Ergebnis verwischen. Manche Server nehmen im Gespräch jeden Empfänger an und entscheiden erst später, was genauso aussieht wie Catch-all. Und manche Server geben auf keine Anfrage eine klare Antwort (Greylisting, Zeitüberschreitung, Anti-Spam-Sperre); dann ist das Ergebnis unbekannt, nicht Catch-all. Ein Prüfdienst kann nicht mehr wissen, als der Server ihm sagt, und er sendet nie eine E-Mail, um es herauszufinden.
Was die API von emailvalidation.io für Catch-all-Adressen liefert
Weil sich auf einer Catch-all-Domain kein einzelnes Postfach bestätigen lässt, überspringt die E-Mail-Validierungs-API die Postfachprüfung bei Domains, die sie bereits als Catch-all kennt. Bei anderen Domains führt sie den Catch-all-Test in derselben Verbindung wie die Postfachprüfung aus, sobald der Server die Adresse annimmt. In beiden Fällen kommt eine Adresse auf einer Catch-all-Domain so zurück:
{
"email": "anna.berg@company.example",
"state": "deliverable",
"reason": "low_deliverability",
"catch_all": true,
"status": "catch_all",
"sub_status": "accept_all",
"explanation": "The domain accepts mail for any address (catch-all), so whether this mailbox exists cannot be confirmed.",
"recommended_action": "send_with_caution",
"catch_all_resolution": {
"method": "signals",
"verdict": "unresolved",
"evidence": ["mx_provider:google", "domain_cache"]
}
}
(Die Antwort hat 21 Felder; gezeigt sind die, auf die es hier ankommt.) Was die Felder für eine Catch-all-Adresse bedeuten, laut API-Dokumentation (Englisch):
| Feld | Wert | Verfügbar |
|---|---|---|
status / sub_status | catch_all / accept_all | In jedem Tarif, mit oder ohne Parameter catch_all |
state / reason | deliverable / low_ | In jedem Tarif |
recommended_ | send_ | In jedem Tarif |
catch_all | true | Nur mit catch_all=1, in bezahlten Tarifen ab Small; sonst null |
catch_ | verdict: "unresolved" plus Hinweise auf Domain-Ebene, etwa der Mail-Anbieter | In jedem Tarif |
catch_all_resolution ist null für jedes Ergebnis, das nicht Catch-all ist. Sein verdict lautet heute unresolved, weil sich ein Catch-all-Postfach nicht bestätigen lässt, ohne an es zu senden, und das tut die API nie. reason: low_deliverability gilt auch für Wegwerf-Adressen und volle Postfächer; entscheiden Sie deshalb anhand von status, wenn Sie diese unterscheiden müssen. Der kostenlose E-Mail-Validator zeigt solche Adressen mit der Bezeichnung „Catch-all“.
Andere Prüfdienste melden denselben Befund unter anderen Namen. ZeroBounce liefert den Status catch-all, NeverBounce das Ergebnis catchall und Kickbox ein Merkmal accept_all (laut der API-Dokumentation des jeweiligen Anbieters, geprüft am 29. Oktober 2026). Wenn Sie von einem dieser Dienste wechseln, ordnen unsere englischen Seiten zu ZeroBounce-Alternativen, NeverBounce-Alternativen und Kickbox-Alternativen deren Codes unseren zu.
Sollten Sie an Catch-all-Adressen senden?
Meist ja, mit Vorsicht. In einer B2B-Liste sind Catch-all-Adressen oft genau die Entscheider, die Sie erreichen wollen, und wer sie alle löscht, wirft gute Kontakte weg. Mit vollem Volumen an alle zu senden, riskiert Bounces, die Sie nicht vorhersehen konnten. Der Mittelweg:
- Führen Sie sie als eigenes Segment. Mischen Sie sie nicht unter die bestätigten Adressen, damit ihre Bounces nicht im Rest verschwinden.
- Senden Sie zuerst in kleineren Gruppen. Beginnen Sie mit Ihren besten Inhalten an einen Teil des Segments, und beobachten Sie Bounces und Beschwerden, bevor Sie an den Rest senden.
- Entfernen Sie, was zurückkommt. Ein Hard-Bounce von einer Catch-all-Domain ist so endgültig wie jeder andere; nehmen Sie die Adresse sofort von der Liste.
- Achten Sie auf Interaktion. Entfernen Sie Adressen, die nach einigen Mailings nie öffnen oder klicken; ein ungelesenes Catch-all-Postfach reagiert nie.
- Nutzen Sie die anderen Signale. Eine persönliche Adresse (
anna.berg@) auf einer Firmendomain erreicht eher jemanden, der sie liest, als eine Rollen-Adresse wieinfo@. Das Feldroleunterscheidet sie.
Bei Anmeldeformularen ist die Entscheidung einfacher: Nehmen Sie Catch-all-Adressen an. Die Person, die die Adresse eingibt, ist gerade da, und eine Bestätigungs-E-Mail zeigt in wenigen Minuten, ob sie ankommt.
Catch-all-Adressen in einer geprüften Liste trennen
Wenn Sie eine Liste über die Bulk-API prüfen, enthält die Ergebnis-CSV Ihre Spalten plus die Spalten emailvalidation_*. Dieses Skript schreibt eine Datei pro Status, sodass die Catch-all-Adressen in einer eigenen Datei landen:
# split_by_status.py: python split_by_status.py contacts.verified.csv
import csv
import sys
from collections import defaultdict
path = sys.argv[1]
groups = defaultdict(list)
with open(path, newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
groups[row["emailvalidation_status"]].append(row)
for status, rows in groups.items():
out = path.removesuffix(".csv") + f".{status}.csv"
with open(out, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=reader.fieldnames)
writer.writeheader()
writer.writerows(rows)
print(f"{status}: {len(rows)} -> {out}")
Für eine Ergebnisdatei mit sieben Zeilen schrieb es contacts.verified.valid.csv, contacts, contacts und contacts, jeweils mit den ursprünglichen Spalten (getestet mit Python 3.14 an einer Datei im dokumentierten CSV-Format). Senden Sie an die Datei valid, legen Sie die Datei catch_all als eigenes Segment an, und verwerfen Sie invalid und do_not_mail. Wie Sie die Liste aus Python hochladen und die Ergebnisse herunterladen, zeigt die Anleitung E-Mail-Validierung in Python.
Quellen
Geprüft am 29. Oktober 2026: Google-Workspace-Hilfe: falsch adressierte E-Mails in einem Catch-all-Postfach empfangen; RFC 5321 (SMTP-Antworten); API-Dokumentation von emailvalidation.io: Catch-all-Erkennung, Result Statuses; API-Dokumentation von ZeroBounce, NeverBounce und Kickbox.