Der günstigste Bounce ist der, der niemals auf Ihre Liste gelangt. Eine Adresse in dem Moment zu verifizieren, in dem jemand sie eintippt — in einer Serverless-Funktion hinter Ihrem Registrierungsformular — stoppt Tippfehler, tote Domains und Wegwerfadressen schon an der Tür, statt später dafür zu bezahlen, sie wieder herauszuputzen und dazwischen den Schaden für die Zustellbarkeit hinzunehmen. Dieser Leitfaden zeigt das Muster mit einer funktionierenden Serverless-Route.
Die kurze Antwort#
Legen Sie die Verifizierung in eine serverseitige Funktion, die Ihr
Registrierungsformular aufruft: Sie hält Ihren API-Schlüssel, ruft
POST /verify auf und reagiert auf das sofortige lokale Ergebnis —
weisen Sie undeliverable ab, bieten Sie die did_you_mean-Korrektur an,
markieren Sie disposable und lassen Sie alles andere durch. Zwei Regeln
entscheiden über Erfolg oder Misserfolg: Rufen Sie die API niemals aus dem Browser
auf (der Schlüssel muss serverseitig bleiben), und blockieren Sie eine
Registrierung niemals, wenn die API langsam ist oder ausfällt (im Fehlerfall
durchlassen).
Warum bei der Registrierung, nicht später#
Verifizierung beim Erfassen ist Prävention; das Bereinigen einer Liste ist Aufräumen, und Prävention gewinnt auf jeder Ebene. Ein Tippfehler, der schon an der Tastatur abgefangen wird, ist ein Abonnent, der mit einer einzeiligen Korrektur gerettet wurde. Eine tote Domain, die bei der Registrierung abgewiesen wird, wird nie zu einem Hard Bounce, der Ihre Bounce-Rate belastet. Eine Wegwerfadresse, die an der Tür blockiert wird, verwässert nie Ihre Kennzahlen oder Ihre Rechnung. Dieselbe Adresse, die drei Monate später bei einer Listenbereinigung auftaucht, hat Sie bereits einen Versand, einen Bounce und ein Stück Absenderreputation gekostet.
Das Muster#
Drei bewegliche Teile:
- Das Formular sendet die Adresse an Ihren eigenen Endpunkt — niemals direkt an die Verifizierungs-API, denn das würde Ihren Schlüssel offenlegen.
- Eine Serverless-Funktion hält den Schlüssel in einer Umgebungsvariablen,
ruft
POST /verifyauf und verwandelt das Ergebnis in eine Entscheidung. - Ihre Registrierungslogik reagiert auf die Entscheidung: abweisen, eine Korrektur vorschlagen oder akzeptieren.
Eine Serverless-Route#
Hier ist sie als Next.js-App-Router-Route-Handler, der auf Vercel als
Serverless-Funktion bereitgestellt wird. Der Schlüssel liegt in
QUALISEND_API_KEY; der Client bekommt ihn nie zu sehen:
// app/api/validate-email/route.ts
import { NextResponse } from "next/server";
const BASE = "https://app.qualisend.com/api/v1";
export async function POST(req: Request) {
const { email } = await req.json();
try {
const res = await fetch(`${BASE}/verify`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.QUALISEND_API_KEY!}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ email }),
signal: AbortSignal.timeout(4000), // don't let a slow probe stall signup
});
// On any API error, fail open — a real user must not be blocked by our outage.
if (!res.ok) return NextResponse.json({ ok: true, degraded: true });
const { result } = await res.json();
if (result.status === "undeliverable") {
return NextResponse.json({
ok: false,
reason: result.reason, // invalid_email | invalid_domain | rejected_email
suggestion: result.did_you_mean, // e.g. "jane@gmail.com"
});
}
if (result.sub_flags?.disposable) {
return NextResponse.json({ ok: false, reason: "disposable" });
}
// deliverable, risky, or unknown — accept, but pass along a typo suggestion if any
return NextResponse.json({ ok: true, status: result.status, suggestion: result.did_you_mean });
} catch {
return NextResponse.json({ ok: true, degraded: true }); // timeout or network error → fail open
}
}
Speichern Sie den Schlüssel mit dem Umgebungs-Tooling Ihrer Plattform
(vercel env add QUALISEND_API_KEY), und er wird zur Laufzeit injiziert — niemals
in den Client gebündelt.
Auf das Ergebnis reagieren#
Das sofortige result ist das lokale Ergebnis (Syntax, DNS, Wegwerfadresse,
Rollenadresse, Tippfehler) — genau das, was Sie bei der Registrierung brauchen:
schnell und ausreichend, um zu entscheiden:
| Ergebnis | Aktion bei der Registrierung |
|---|---|
undeliverable | Inline abweisen — "Diese Adresse scheint nicht zustellbar zu sein". |
did_you_mean vorhanden | Die Korrektur anbieten — "Meinten Sie jane@gmail.com?" — die wertvollste Rettung. |
disposable-Flag | Abweisen oder markieren, je nachdem, wie streng Ihr Produkt ist — siehe Rollen-, Wegwerf- & Freemail-Adressen. |
risky / Catch-all | Akzeptieren, aber kennzeichnen, damit Sie behutsam an das Catch-all-Segment senden können. |
unknown | Akzeptieren. Die Infrastruktur hat nicht geantwortet — verlieren Sie deswegen niemals eine echte Registrierung. |
deliverable | Akzeptieren. |
Im Fehlerfall immer durchlassen#
Das eine, worüber nicht verhandelt wird: Wenn der Verifizierungsaufruf einen
Fehler wirft, in einen Timeout läuft oder einen Nicht-2xx-Status zurückgibt,
lassen Sie die Registrierung durch. Eine Verifizierungs-API ist ein Qualitätsfilter,
kein Authentifizierungstor, und einen zahlenden Kunden wegen eines
vorübergehenden Ausfalls zu blockieren, ist ein weitaus schlechteres Ergebnis, als
eine fragwürdige Adresse durchzulassen. Sowohl der !res.ok-Zweig als auch das
catch oben geben genau aus diesem Grund ok: true zurück. Protokollieren Sie
die durchgelassenen Registrierungen und fangen Sie sie bei Ihrer nächsten
Listenbereinigung ab.
Häufig gestellte Fragen#
Verlangsamt die Verifizierung bei der Registrierung das Formular?#
Kaum, wenn Sie es richtig machen. Das lokale Ergebnis kommt schnell zurück, und der 4-Sekunden-Timeout oben deckelt den schlimmsten Fall — darüber hinaus lassen Sie durch und akzeptieren die Registrierung ohnehin. Nutzer erhalten nahezu sofortige "Meinten Sie"-Korrekturen; sie warten nie auf einen langsamen Mailserver, weil Sie auf das sofortige lokale Ergebnis reagieren und nicht auf die SMTP-Prüfung warten.
Sollte ich Wegwerf-E-Mail-Adressen bei der Registrierung blockieren?#
Das hängt von Ihrem Produkt ab. Bei einem kostenpflichtigen oder reputationssensiblen Dienst lohnt es sich, Wegwerfadressen gleich an der Tür zu blockieren — von diesen Nutzern wollten Sie ohnehin nie wieder hören. Bei einer reibungsarmen Consumer-Registrierung kann es besser sein, sie für eine spätere Prüfung zu markieren, statt zusätzliche Hürden aufzubauen. Die Route oben weist sie ab; lockern Sie das zu einer Markierung, wenn das besser zu Ihrem Funnel passt.
Brauche ich das vollständige SMTP-bestätigte Ergebnis bei der Registrierung?#
Meistens nicht. Das sofortige lokale Ergebnis fängt den Großteil schlechter
Registrierungen ab — Tippfehler, tote Domains, Wegwerfadressen — ganz ohne
Warten. Das vollständige SMTP-bestätigte Ergebnis (über GET /jobs
oder einen Massen-Job) heben Sie sich für die Listenbereinigung auf, wo Latenz
keine Rolle spielt, das Erfassen jedes toten Postfachs aber sehr wohl.
Wie halte ich meinen API-Schlüssel geheim?#
Rufen Sie die Verifizierungs-API ausschließlich aus serverseitigem Code auf — einer Serverless-Funktion, einem Route-Handler oder einem Backend — und speichern Sie den Schlüssel in einer Umgebungsvariablen, niemals in clientseitigem JavaScript. Wenn der Schlüssel im Browser-Bundle landen würde, ist er am falschen Ort.
Bereit, das Ganze zu verdrahten? Der kostenlose Tarif enthält 100
Credits zum Testen des Ablaufs, und die API-Referenz hat den
/verify-Endpunkt mit Copy-and-paste-Beispielen in sieben Sprachen.