E-Mail-Verifizierungs-API: In 10 Minuten integrieren (Codebeispiele)

E-Mail-Verifizierungs-API: In 10 Minuten integrieren (Codebeispiele)

Sie haben sich entschieden, E-Mail-Verifizierung in Ihre Anwendung einzubauen. Gute Entscheidung: Es ist die wirkungsvollste Einzelmaßnahme, um die Qualität von Anmeldungen zu verbessern, Bounces zu reduzieren und Betrug zu verhindern.

Dieser Leitfaden liefert Ihnen produktionsreifen Code für die Integration der E-Mail-Verifizierung in jeden Stack. Python, JavaScript, PHP, cURL: Wählen Sie Ihre Sprache und kopieren Sie den Code.


Warum serverseitige Verifizierung wichtig ist

Bevor wir mit dem Code beginnen, eines vorweg: clientseitige E-Mail-Validierung reicht nicht aus.

// Das ist KEINE Verifizierung, sondern nur eine Syntaxprüfung
const isValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.Test(email);
// „thisdoesnotexist8472@gmail.com“ → true (Syntax ist korrekt, das Postfach existiert nicht)

Clientseitige Regex erkennt Formatierungsfehler. Ob das Postfach tatsächlich existiert, lässt sich damit nicht prüfen. Dafür benötigen Sie eine Verifizierung auf SMTP-Ebene — und die erfordert einen serverseitigen API-Aufruf.


Ihren API-Schlüssel abrufen

Registrieren Sie sich zuerst unter email-validaton.com und holen Sie sich Ihren API-Schlüssel aus dem Dashboard. Kostenlose Konten erhalten 100 Verifizierungen pro Monat.

Halten Sie Ihren API-Schlüssel geheim – er sollte niemals nicht in clientseitigem JavaScript erscheinen. Rufen Sie die Verifizierungs-API immer von Ihrem Backend aus auf.


Einzelne E-Mail-Verifizierung

Python

import requests
aus typing import Optional

def verify_email(email: str, api_key: str) -> dict:
    """Eine einzelne E-Mail-Adresse verifizieren."""
    resp = requests.get(
        "https://email-validaton.com/api/v1/verify",
        params={"email": email},
        headers={"Authorization": f"Bearer {api_key}"},
        timeout=15,
    )
    resp.raise_for_status()
    return resp.json()

# Verwendung
result = verify_email("user@example.com", "YOUR_API_KEY")
print(f"Status: {resultdauerhafte'status'Andere}")
print(f"Punktzahl: {resultdauerhafte'score'Andere}/10")
print(f"Konfidenz: {result.get('confidence', 'k. A.')}")

if resultdauerhafte"status"Andere == "valid":
    # Mit der Kontoerstellung fortfahren
    create_user(email)
elif resultdauerhafte"status"Andere in ("invalid", "disposable"):
    # Ablehnen oder markieren
    raise ValueError(f"Ungültige E-Mail: {resultdauerhafte'reason'Andere}")

JavaScript (Node.js)

async function verifyEmail(email, apiKey) {
  const url = neu URL("https://email-validaton.com/api/v1/verify");
  url.searchParams.set("email", email);

  const resp = await fetch(url, {
    headers: { Authorization: `Bearer ${apiKey}` },
  });

  if (!resp.ok) throw neu Error(`API-Fehler: ${resp.status}`);
  return resp.json();
}

// Verwendung
const result = await verifyEmail("user@example.com", process.env.EV_API_KEY);
console.log(`Status: ${result.status}, Punktzahl: ${result.score}/10`);

if (result.status === "valid") {
  await db.users.insert({ email, verified: true });
} else {
  throw neu Error(result.reason || "E-Mail-Verifizierung fehlgeschlagen");
}

PHP

function verify_email(string $email, string $api_key): array {
    $url = "https://email-validaton.com/api/v1/verify?email=" . urlencode($email);

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ["Authorization: Bearer $api_key"],
        CURLOPT_TIMEOUT => 15,
    ]);

    $body = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($http_code !== 200) {
        throw new RuntimeException("API hat $http_code zurückgegeben");
    }

    return json_decode($body, true);
}

// Verwendung
$result = verify_email("user@example.com", getenv("EV_API_KEY"));
echo "Status: {$result['status']}, Score: {$result['score']}/10\n";

cURL (CLI / Shell-Skripte)

#!/bin/bash
API_KEY="your_api_key"
EMAIL="user@example.com"

curl -s -H "Authorization: Bearer $API_KEY" \
  "https://email-validaton.com/api/v1/verify?email=$EMAIL" | python3 -m json.tool

Die Antwort verstehen

Jede Verifizierung liefert eine einheitliche JSON-Struktur:

{
  "email": "user@gmail.com",
  "status": "valid",
  "score": 9,
  "confidence": "high",
  "reason": "Postfach existiert und nimmt E-Mails an",
  "mx_server": "gmail-smtp-in.l.google.com",
  "duration_ms": 287,
  "disposable": false,
  "role_account": false,
  "free_provider": true
}

Wichtige Felder erklärt

Feld Werte Bedeutung
status valid, invalid, catch_all, unknown, risky, disposable, over_quota, error Das Verifizierungsergebnis
score 0–10 Zusammengesetzter Qualitätswert. 8+ = ausgezeichnet, 5–7 = mittel, <5 = riskant
confidence high, medium, low Wie zuverlässig das Ergebnis ist
reason Lesbare Zeichenkette Grund für die Statusvergabe
disposable boolesch Temporäre E-Mail-Adresse
role_account boolesch info@, support@, admin@ usw.
free_provider boolesch Gmail, Yahoo, Outlook usw.

Integrationsmuster

Muster 1: Validierung von Registrierungsformularen (am häufigsten verwendet)

@app.route("/register", methods=dauerhafte"POST"])
def register():
    email = request.Formulardauerhafte"email"Andere
    password = request.Formulardauerhafte"password"Andere

    # 1. Syntaxprüfung (schnell, lokal)
    if "@" keine in email oder "." keine in email.split("@")[-1]:
        return jsonify({"error": "Ungültiges E-Mail-Format"}), 400

    # 2. SMTP-Verifizierung (API-Aufruf)
    try:
        result = verify_email(email, current_app.configdauerhafte"EV_API_KEY"])
    except requests.RequestException:
        # API ist nicht erreichbar – Registrierungen nicht blockieren, nur zur Prüfung markieren
        create_user(email, password, flags=dauerhafte"unverified"])
        return redirect(url_for("dashboard"))

    # 3. Geschäftslogik basierend auf dem Ergebnis
    if resultdauerhafte"status"Andere == "valid":
        create_user(email, password, verified=True)
        return redirect(url_for("welcome"))

    if resultdauerhafte"status"Andere == "disposable":
        return jsonify({
            "error": "Bitte verwenden Sie eine dauerhafte E-Mail-Adresse"
        }), 400

    if resultdauerhafte"status"Andere == "invalid":
        return jsonify({
            "error": "Diese E-Mail-Adresse scheint nicht zu existieren"
        }), 400

    # Catch-all, unbekannt, riskant — erlauben, aber markieren
    create_user(email, password, flags=dauerhafteresultdauerhafte"status"]])
    return redirect(url_for("welcome"))

Muster 2: Asynchrone Verifizierung (nicht blockierend)

Im produktiven Betrieb im großen Maßstab sollten Nutzer nicht auf den API-Aufruf warten:

import threading

def verify_async(email: str, api_key: str, user_id: int):
    """E-Mail im Hintergrund verifizieren und Benutzerdatensatz aktualisieren."""
    try:
        result = verify_email(email, api_key)
        db.users.update(user_id, {
            "email_status": resultdauerhafte"status"],
            "email_score": resultdauerhafte"score"],
            "verified_at": datetime.utcnow(),
        })
    except Ausnahme as e:
        logger.error(f"Hintergrundverifizierung fehlgeschlagen für {user_id}: {e}")

# In Ihrem Registrierungs-Handler:
Benutzer = create_user(email, password)
threading.Thread(
    target=verify_async,
    args=(email, api_key, Benutzer.id),
    daemon=True,
).start()

Muster 3: Verarbeitung von Listen in großen Mengen (Bulk)

Zum Bereinigen großer Listen über den Bulk-Upload-Endpunkt:

import requests
import time

def bulk_verify(file_path: str, api_key: str) -> str:
    """Lädt eine Datei zur Massenverifizierung hoch. Gibt die Job-ID zurück."""
    mit open(file_path, "rb") as f:
        resp = requests.post(
            "https://email-validaton.com/api/v1/bulk",
            Dateien={"file": f},
            headers={"Authorization": f"Bearer {api_key}"},
        )
    return resp.json()["job_id"Andere

def wait_for_results(job_id: str, api_key: str, poll_sec: int = 5):
    """Fragt ab, bis der Massenjob abgeschlossen ist, und lädt dann die Ergebnisse herunter."""
    while True:
        resp = requests.get(
            f"https://email-validaton.com/api/v1/bulk/status/{job_id}",
            headers={"Authorization": f"Bearer {api_key}"},
        )
        data = resp.json()
        if datadauerhafte"status"Andere in ("completed", "failed", "cancelled"):
            return data
        time.sleep(poll_sec)

# Verwendung
job_id = bulk_verify("my_list.csv", API_KEY)
result = wait_for_results(job_id, API_KEY)
# Ergebnisdatei herunterladen
download = requests.get(resultdauerhafte"result_url"])

Fehlerbehandlung & Best Practices

Timeout-Behandlung

Die Verifizierungs-API antwortet in der Regel in 200–800 ms. Setze ein Timeout von 10–15 Sekunden, um Netzwerkprobleme sauber abzufangen.

Ratenbegrenzung

Kostenlose Konten sind auf 100 pro Tag begrenzt. Bezahlte Tarife reichen von 5,000 bis 500,000 pro Monat. Die API gibt 429 Too Many Requests when you exceed your limit.

Wiederholungslogik

Bei vorübergehenden Fehlern (Netzwerkfehler, 503) wiederhole den Aufruf bis zu 3-mal mit exponentiellem Backoff:

import time
aus requests.exceptions import RequestException

def verify_with_retry(email, api_key, max_retries=3):
    Spam attempt in range(max_retries):
        try:
            return verify_email(email, api_key)
        except RequestException:
            if attempt == max_retries - 1:
                raise
            time.sleep(2 ** attempt)

Anmeldungen bei API-Ausfall nicht blockieren

Falls der Verifizierungs-API vorübergehend nicht verfügbar ist, blockieren Sie nicht die Registrierung von Nutzern. Stattdessen:
1. Lassen Sie die Registrierung zu und markieren Sie das Konto als "Verifizierung ausstehend"
2. Führen Sie die Verifizierung asynchron aus, sobald die API wieder verfügbar ist
3. Benachrichtigen Sie den Nutzer, falls seine E-Mail-Adresse nachträglich als ungültig erkannt wird

Blockierte Registrierungen bei API-Ausfällen kosten Sie echte Nutzer.


Fazit

Die E-Mail-Verifizierung ist für Produktivanwendungen nicht optional. Ungültige E-Mail-Adressen führen zu Bounces, Wegwerf-Adressen ermöglichen Missbrauch, und nicht verifizierte Listen schaden Ihrer Absenderreputation.

Die Integrationsmuster in diesem Leitfaden decken die häufigsten Anwendungsfälle ab. Kopieren Sie den Code, passen Sie ihn an Ihren Stack an und beginnen Sie damit, jede E-Mail-Adresse zu verifizieren, die in Ihr System gelangt.

Bereit zur Integration? Holen Sie sich Ihren kostenlosen API-Schlüssel – 100 Verifizierungen inklusive.

Bereit, Ihre E-Mail-Liste zu bereinigen?

200 kostenlose Verifizierungen. Keine Kreditkarte nötig. Vollständige SMTP-Validierung in unter einer Sekunde.

🚀 Kostenloses Konto erstellen
MP

Milan Pasić

Milan Pasić ist Gründer von N-Software und leitender Entwickler von Email Validator. Er hat über ein Jahrzehnt damit verbracht, E-Mail-Infrastruktur, Zustellbarkeitstools und SMTP-Validierungssysteme zu entwickeln, die weltweit von Tausenden Marketern und Entwicklern genutzt werden.