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}/verifyAuthentifizieren Sie sich mit Authorization: Bearer <token> oder X-API-Key: <api key>.
curl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/verify \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Antwort
{
"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"
}| Feld | Typ | Beschreibung |
|---|---|---|
domainId | string | Öffentliche ID der Domain |
domain | string | Domainname |
isVerified | boolean | Nur true, wenn SPF, DKIM und DMARC alle valid sind |
spfStatus, dkimStatus, dmarcStatus | enum | Eintragsstatus: pending, valid oder invalid |
verifiedAt | datetime | Zeitpunkt der Verifizierung |
message | string | Zusammenfassung des Ergebnisses |
dnsRecords | object | Die im DNS gefundenen SPF-, DKIM- (mit dkimSelector) und DMARC-Einträge oder der erwartete Wert, wenn keiner gefunden wurde |
spfErrorMessage, dkimErrorMessage, dmarcErrorMessage | string | Warum der Eintrag fehlgeschlagen ist; entfällt, wenn er bestanden hat |
trackingVerified, bounceVerified, mxVerified | boolean | Ob die benutzerdefinierte Tracking-Domain, die benutzerdefinierte Bounce-Domain (Return-Path) und der eingehende MX-Eintrag verifiziert sind |
trackingVerifiedAt, bounceVerifiedAt, mxVerifiedAt | datetime | Wann jeweils verifiziert wurde |
trackingErrorMessage, bounceErrorMessage, mxErrorMessage | string | Warum einer davon fehlgeschlagen ist; nur für eingeschaltete Einträge zurückgegeben |
lastDnsCheckAt | datetime | Zeitpunkt der letzten DNS-Prüfung |
Eintrags-Status
Jede DNS-Eintrags-Prüfung gibt einen dieser Status zurück:
| Status | Beschreibung |
|---|---|
pending | Noch nicht geprüft |
valid | Eintrag gefunden und korrekt |
invalid | Eintrag fehlt oder ist falsch |
Verifizierungsanforderungen
Damit eine Domain verifiziert ist (isVerified: true), müssen SPF, DKIM und DMARC alle valid sein:
| Eintrag | Erforderlich | Muss bestehen |
|---|---|---|
| SPF | Ja | include:spf.mlnd.net muss vorhanden sein |
| DKIM | Ja | Gültiger öffentlicher Schlüssel für den aktiven DKIM-Schlüssel |
| DMARC | Ja | Ein Eintrag bei _dmarc, der mit v=DMARC1 beginnt und eine Richtlinie hat (p=none, p=quarantine oder p=reject) |
| Rückpfad | Nein (für neue Domains standardmäßig aktiv; blockiert den Versand nicht) | CNAME auf bounce.mlnd.net, „Nur DNS“ (ohne Proxy) |
| Tracking | Nein (nur mit benutzerdefinierter Tracking-Domain) | CNAME auf track.mlnd.net, „Nur DNS“ (ohne Proxy) |
| Eingehender MX | Nein (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:
{
"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-checkcurl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/health-check \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"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
| Status | Beschreibung |
|---|---|
healthy | Alle Prüfungen bestanden: keine Probleme erkannt |
warning | Domain funktioniert, aber es gibt potenzielle Verbesserungen |
critical | Domain hat Probleme, die die E-Mail-Zustellung verhindern können |
unknown | Status kann nicht ermittelt werden (DNS-Lookup-Fehler) |
Fehlercodes
| Code | Schweregrad | Beschreibung |
|---|---|---|
DnsNxDomain | critical | Die Domain existiert nicht (von einem zweiten, unabhängigen Resolver bestätigt) |
SpfMissing | critical | Kein SPF-Eintrag gefunden |
SpfMissingInclude | critical | Der SPF-Eintrag enthält spf.mlnd.net nicht |
SpfPermError | critical | Mehr als ein SPF-Eintrag (dauerhafter SPF-Fehler) |
SpfTooManyLookups | warning | Der SPF-Eintrag benötigt mehr als 10 DNS-Abfragen |
DkimMissing | critical | Kein DKIM-Eintrag gefunden |
DkimMissingSelector | critical | Kein DKIM-Eintrag beim Selektor eines aktiven Schlüssels |
DkimKeyMismatch | critical | Der DKIM-Schlüssel im DNS stimmt nicht mit dem Schlüssel von MailLand überein |
DkimRevoked | critical | Der DKIM-Schlüssel wurde widerrufen (leeres p=-Tag) |
DmarcMissing | warning | Kein DMARC-Eintrag gefunden |
DmarcNonePolicy | warning | DMARC-Richtlinie ist none (nur Überwachung) |
MxMissing | critical | Kein MX-Eintrag (nur geprüft, wenn eingehende E-Mails eingeschaltet sind) |
MxWrongHost | warning | Der MX-Eintrag zeigt nicht auf mx.mlnd.net |
DnsTimeout, DnsServFail, DnsLookupFailed | warning | Die 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-historycurl https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/health-history \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"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.netvor dem~all- oder-all-Mechanismus erscheint
DKIM-Eintrag nicht gefunden
- Überprüfen Sie, dass der Eintrag bei
mlnd._domainkey.yourdomain.comist (nichtmlnd._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.comist (oder Ihrer benutzerdefinierten Bounce-Subdomain) - Der CNAME-Wert muss
bounce.mlnd.netsein (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
- DNS-Einrichtung: erforderliche DNS-Einträge überprüfen
- DKIM-Schlüsselrotation: DKIM-Signaturschlüssel rotieren
- REST API: nach der Verifizierung E-Mails versenden