MailLandDocs
Domains

Domain-Verifizierung

Domain-Besitz durch DNS-Eintragsvalidierung verifizieren

Nach der Konfiguration der DNS-Einträge lösen Sie die Verifizierung aus, um den Domain-Besitz nachzuweisen und E-Mail-Versand freizuschalten. MailLand prüft SPF-, DKIM-, DMARC- und Rückpfad-Einträge.

Eine Domain verifizieren

POST https://api.mail.land/v1/domains/{id}/verify

Authentifizieren Sie sich mit Authorization: Bearer <token> oder X-API-Key: <api key>.

Verify a domain
curl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/verify \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Antwort

Verification response
{
  "domainId": "k3v9x2m8q1w7z4",
  "domain": "yourdomain.com",
  "isVerified": true,
  "spfStatus": "valid",
  "dkimStatus": "valid",
  "dmarcStatus": "valid",
  "verifiedAt": "2026-02-17T10:15:00Z",
  "message": "Domain successfully verified with all DNS records valid",
  "dnsRecords": {
    "spfRecord": "v=spf1 include:spf.mlnd.net ~all",
    "dkimSelector": "mlnd",
    "dkimRecord": "v=DKIM1; k=rsa; p=MIIBIjANBgkq...",
    "dmarcRecord": "v=DMARC1; p=none; rua=mailto:[email protected]"
  },
  "trackingVerified": false,
  "bounceVerified": true,
  "bounceVerifiedAt": "2026-02-17T10:15:00Z",
  "mxVerified": false,
  "lastDnsCheckAt": "2026-02-17T10:15:00Z"
}
FeldTypBeschreibung
domainIdstringÖffentliche ID der Domain
domainstringDomainname
isVerifiedbooleanNur true, wenn SPF, DKIM und DMARC alle valid sind
spfStatus, dkimStatus, dmarcStatusenumEintragsstatus: pending, valid oder invalid
verifiedAtdatetimeZeitpunkt der Verifizierung
messagestringZusammenfassung des Ergebnisses
dnsRecordsobjectDie im DNS gefundenen SPF-, DKIM- (mit dkimSelector) und DMARC-Einträge oder der erwartete Wert, wenn keiner gefunden wurde
spfErrorMessage, dkimErrorMessage, dmarcErrorMessagestringWarum der Eintrag fehlgeschlagen ist; entfällt, wenn er bestanden hat
trackingVerified, bounceVerified, mxVerifiedbooleanOb die benutzerdefinierte Tracking-Domain, die benutzerdefinierte Bounce-Domain (Return-Path) und der eingehende MX-Eintrag verifiziert sind
trackingVerifiedAt, bounceVerifiedAt, mxVerifiedAtdatetimeWann jeweils verifiziert wurde
trackingErrorMessage, bounceErrorMessage, mxErrorMessagestringWarum einer davon fehlgeschlagen ist; nur für eingeschaltete Einträge zurückgegeben
lastDnsCheckAtdatetimeZeitpunkt der letzten DNS-Prüfung

Eintrags-Status

Jede DNS-Eintrags-Prüfung gibt einen dieser Status zurück:

StatusBeschreibung
pendingNoch nicht geprüft
validEintrag gefunden und korrekt
invalidEintrag fehlt oder ist falsch

Verifizierungsanforderungen

Damit eine Domain verifiziert ist (isVerified: true), müssen SPF, DKIM und DMARC alle valid sein:

EintragErforderlichMuss bestehen
SPFJainclude:spf.mlnd.net muss vorhanden sein
DKIMJaGültiger öffentlicher Schlüssel für den aktiven DKIM-Schlüssel
DMARCJaEin Eintrag bei _dmarc, der mit v=DMARC1 beginnt und eine Richtlinie hat (p=none, p=quarantine oder p=reject)
RückpfadNein (für neue Domains standardmäßig aktiv; blockiert den Versand nicht)CNAME auf bounce.mlnd.net, „Nur DNS“ (ohne Proxy)
TrackingNein (nur mit benutzerdefinierter Tracking-Domain)CNAME auf track.mlnd.net, „Nur DNS“ (ohne Proxy)
Eingehender MXNein (nur mit eingehenden E-Mails)MX auf mx.mlnd.net

Die optionalen Einträge ändern isVerified nicht. Eine benutzerdefinierte Tracking- oder Bounce-Domain wird erst nach Verifizierung ihres eigenen Eintrags zum Versand verwendet; bis dahin nutzt MailLand seine Standard-Hosts.

Teilverifizierung

Wenn einige Einträge gefunden werden, andere aber fehlen, zeigt die Antwort genau an, was Aufmerksamkeit erfordert:

Partial verification
{
  "domainId": "k3v9x2m8q1w7z4",
  "domain": "yourdomain.com",
  "isVerified": false,
  "spfStatus": "valid",
  "dkimStatus": "invalid",
  "dmarcStatus": "invalid",
  "message": "Domain verification incomplete. Please check DNS records below.",
  "dnsRecords": {
    "spfRecord": "v=spf1 include:spf.mlnd.net ~all",
    "dkimSelector": "mlnd",
    "dkimRecord": "v=DKIM1; k=rsa; p=MIIBIjANBgkq...",
    "dmarcRecord": "v=DMARC1; p=quarantine; pct=100; adkim=r; aspf=r; rua=mailto:[email protected]; sp=none"
  },
  "dkimErrorMessage": "DKIM record not found. Please add the TXT record to your DNS.",
  "dmarcErrorMessage": "DMARC record not found. Please add TXT record at _dmarc subdomain.",
  "trackingVerified": false,
  "trackingErrorMessage": "CNAME record not found. Please add a CNAME record for track.yourdomain.com pointing to track.mlnd.net",
  "bounceVerified": false,
  "mxVerified": false,
  "lastDnsCheckAt": "2026-02-17T10:20:00Z"
}

Automatische Neuverifizierung

MailLand überprüft verifizierte Domains im Hintergrund regelmäßig über den PendingDomainVerificationWorker und den DnsHealthCheckWorker:

  • Ausstehende Domains: 7 Tage lang stündlich erneut geprüft; danach manuell verifizieren
  • Verifizierte Domains: DNS-Gesundheit wird regelmäßig geprüft, um entfernte oder geänderte Einträge zu erkennen

Wenn die DNS-Einträge einer verifizierten Domain später entfernt oder geändert werden, wird der Status des betroffenen Eintrags (spfStatus/dkimStatus/dmarcStatus) invalid, isFullyVerified wird false, und der Versand stoppt, bis der Eintrag korrigiert ist. verificationStatus selbst bleibt Verified: MailLand stellt den Eintragsstatus automatisch wieder her, sobald DNS wieder korrekt ist.

Domain-Gesundheitsprüfung

Führen Sie eine bedarfsgesteuerte Gesundheitsprüfung durch, die über die grundlegende Verifizierung hinausgeht:

POST https://api.mail.land/v1/domains/{id}/health-check
Run a health check
curl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/health-check \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Health check response
{
  "domainName": "yourdomain.com",
  "status": "warning",
  "previousStatus": "healthy",
  "issues": [
    {
      "code": "DmarcNonePolicy",
      "message": "DMARC policy is set to 'none' (monitoring only)",
      "severity": "warning",
      "record": "DMARC",
      "details": "Consider upgrading to p=quarantine or p=reject"
    }
  ],
  "statusChanged": true,
  "checkedAt": "2026-02-17T10:30:00Z",
  "observationId": { "value": "3f2c9a1e-7b4d-4c1a-9e0f-5a6b7c8d9e0f" },
  "spf": {
    "lookupCompleted": true,
    "isValid": true,
    "value": "v=spf1 include:spf.mlnd.net ~all",
    "issues": [],
    "recordVerdict": "valid"
  },
  "dkim": {
    "lookupCompleted": true,
    "isValid": true,
    "issues": [],
    "recordVerdict": "valid"
  },
  "dmarc": {
    "lookupCompleted": true,
    "isValid": true,
    "value": "v=DMARC1; p=none; rua=mailto:[email protected]",
    "issues": [
      {
        "code": "DmarcNonePolicy",
        "message": "DMARC policy is set to 'none' (monitoring only)",
        "severity": "warning",
        "record": "DMARC",
        "details": "Consider upgrading to p=quarantine or p=reject"
      }
    ],
    "recordVerdict": "valid"
  }
}

Gesundheitsstatus

StatusBeschreibung
healthyAlle Prüfungen bestanden: keine Probleme erkannt
warningDomain funktioniert, aber es gibt potenzielle Verbesserungen
criticalDomain hat Probleme, die die E-Mail-Zustellung verhindern können
unknownStatus kann nicht ermittelt werden (DNS-Lookup-Fehler)

Fehlercodes

CodeSchweregradBeschreibung
DnsNxDomaincriticalDie Domain existiert nicht (von einem zweiten, unabhängigen Resolver bestätigt)
SpfMissingcriticalKein SPF-Eintrag gefunden
SpfMissingIncludecriticalDer SPF-Eintrag enthält spf.mlnd.net nicht
SpfPermErrorcriticalMehr als ein SPF-Eintrag (dauerhafter SPF-Fehler)
SpfTooManyLookupswarningDer SPF-Eintrag benötigt mehr als 10 DNS-Abfragen
DkimMissingcriticalKein DKIM-Eintrag gefunden
DkimMissingSelectorcriticalKein DKIM-Eintrag beim Selektor eines aktiven Schlüssels
DkimKeyMismatchcriticalDer DKIM-Schlüssel im DNS stimmt nicht mit dem Schlüssel von MailLand überein
DkimRevokedcriticalDer DKIM-Schlüssel wurde widerrufen (leeres p=-Tag)
DmarcMissingwarningKein DMARC-Eintrag gefunden
DmarcNonePolicywarningDMARC-Richtlinie ist none (nur Überwachung)
MxMissingcriticalKein MX-Eintrag (nur geprüft, wenn eingehende E-Mails eingeschaltet sind)
MxWrongHostwarningDer MX-Eintrag zeigt nicht auf mx.mlnd.net
DnsTimeout, DnsServFail, DnsLookupFailedwarningDie DNS-Abfrage wurde nicht abgeschlossen; über den Eintrag wurde nichts festgestellt

Gesundheitshistorie

Historische Gesundheitsprüfungsergebnisse anzeigen. Optionale from/to-Query-Parameter (ISO-8601-Daten) grenzen den Zeitraum ein:

GET https://api.mail.land/v1/domains/{id}/health-history
Get health history
curl https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/health-history \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Health history response
[
  {
    "domainName": "yourdomain.com",
    "prevStatus": "healthy",
    "newStatus": "warning",
    "issues": ["DmarcNonePolicy"],
    "reason": "Scheduled health check",
    "checkedAt": "2026-02-17T10:30:00Z"
  },
  {
    "domainName": "yourdomain.com",
    "prevStatus": "warning",
    "newStatus": "healthy",
    "issues": [],
    "reason": "Scheduled health check",
    "checkedAt": "2026-02-16T10:30:00Z"
  }
]

Die Antwort ist ein einfaches Array (kein items-Wrapper, kein nextCursor/hasMore).

Fehlerbehebung

SPF-Eintrag nicht gefunden

  • Stellen Sie sicher, dass Sie genau einen SPF-TXT-Eintrag auf Ihrer Root-Domain haben
  • Mehrere SPF-Einträge verursachen Fehler: fassen Sie sie in einem einzigen Eintrag zusammen
  • Prüfen Sie, dass include:spf.mlnd.net vor dem ~all- oder -all-Mechanismus erscheint

DKIM-Eintrag nicht gefunden

  • Überprüfen Sie, dass der Eintrag bei mlnd._domainkey.yourdomain.com ist (nicht mlnd._domainkey)
  • Der Eintragstyp muss TXT sein (nicht CNAME)
  • Einige DNS-Anbieter benötigen Anführungszeichen um lange TXT-Werte
  • Prüfen Sie auf nachgestellte Leerzeichen oder Zeilenumbrüche im eingefügten öffentlichen Schlüssel

Rückpfad-CNAME nicht gefunden

  • Bestätigen Sie, dass der CNAME bei bounce.yourdomain.com ist (oder Ihrer benutzerdefinierten Bounce-Subdomain)
  • Der CNAME-Wert muss bounce.mlnd.net sein (keine IP-Adresse und kein MX-Eintrag)
  • Cloudflare-Benutzer: Stellen Sie sicher, dass der Proxy deaktiviert ist (graue Wolke / Nur DNS)

DNS-Propagierungsverzögerung

  • Die meisten DNS-Änderungen propagieren sich innerhalb von 5–15 Minuten
  • Bei niedrigem TTL (300 s) sollten Änderungen schnell erscheinen
  • Vorhandene Einträge mit hohem TTL können bis zu 48 Stunden für globale Aktualisierung benötigen
  • Versuchen Sie die Verifizierung nach 15 Minuten Wartezeit erneut

Nächste Schritte

Auf dieser Seite