Verificación de dominio
Verifique la propiedad de su dominio mediante la validación de registros DNS
Después de configurar los registros DNS, active la verificación para demostrar la propiedad del dominio y desbloquear el envío de correo electrónico. MailLand verifica los registros SPF, DKIM, DMARC y de ruta de retorno.
Verificar un dominio
POST https://api.mail.land/v1/domains/{id}/verifyAutentíquese con Authorization: Bearer <token> o X-API-Key: <api key>.
curl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/verify \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Respuesta
{
"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"
}| Campo | Tipo | Descripción |
|---|---|---|
domainId | string | ID pública del dominio |
domain | string | Nombre del dominio |
isVerified | boolean | true solo cuando SPF, DKIM y DMARC son todos valid |
spfStatus, dkimStatus, dmarcStatus | enum | Estado del registro: pending, valid o invalid |
verifiedAt | datetime | Cuándo se verificó el dominio |
message | string | Resumen del resultado |
dnsRecords | object | Los registros SPF, DKIM (con dkimSelector) y DMARC encontrados en DNS, o el valor esperado si no se encontró ninguno |
spfErrorMessage, dkimErrorMessage, dmarcErrorMessage | string | Por qué falló el registro; se omite si pasó |
trackingVerified, bounceVerified, mxVerified | boolean | Si están verificados el dominio de seguimiento personalizado, el dominio de rebote personalizado (Return-Path) y el registro MX de entrada |
trackingVerifiedAt, bounceVerifiedAt, mxVerifiedAt | datetime | Cuándo se verificó cada uno |
trackingErrorMessage, bounceErrorMessage, mxErrorMessage | string | Por qué falló alguno de ellos; solo se devuelve para los que tiene activados |
lastDnsCheckAt | datetime | Cuándo se comprobó el DNS por última vez |
Estados de los registros
Cada verificación de registro DNS devuelve uno de estos estados:
| Estado | Descripción |
|---|---|
pending | Aún no comprobado |
valid | Registro encontrado y correcto |
invalid | Registro ausente o incorrecto |
Requisitos de verificación
Para que un dominio esté verificado (isVerified: true), SPF, DKIM y DMARC deben ser todos valid:
| Registro | Requerido | Debe pasar |
|---|---|---|
| SPF | Sí | Debe estar presente include:spf.mlnd.net |
| DKIM | Sí | Clave pública válida para la clave DKIM activa |
| DMARC | Sí | Un registro en _dmarc que empiece por v=DMARC1 y tenga una política (p=none, p=quarantine o p=reject) |
| Ruta de retorno | No (activado por defecto en los dominios nuevos; no bloquea el envío) | CNAME que apunte a bounce.mlnd.net, solo DNS (sin proxy) |
| Seguimiento | No (solo con un dominio de seguimiento personalizado) | CNAME que apunte a track.mlnd.net, solo DNS (sin proxy) |
| MX de entrada | No (solo con correo entrante) | MX que apunte a mx.mlnd.net |
Los registros opcionales no cambian isVerified. Un dominio de seguimiento o de rebote personalizado solo se usa para enviar cuando su propio registro está verificado; hasta entonces, MailLand usa sus hosts predeterminados.
Verificación parcial
Si se encuentran algunos registros pero faltan otros, la respuesta muestra exactamente qué necesita atención:
{
"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"
}Re-verificación automática
MailLand vuelve a verificar periódicamente los dominios verificados en segundo plano a través del PendingDomainVerificationWorker y el DnsHealthCheckWorker:
- Dominios pendientes: se vuelven a comprobar cada hora durante 7 días después de agregarse; después, verifique manualmente
- Dominios verificados: la salud del DNS se verifica periódicamente para detectar registros eliminados o modificados
Si los registros DNS de un dominio verificado se eliminan o cambian posteriormente, el estado del registro afectado (spfStatus/dkimStatus/dmarcStatus) se convierte en invalid, isFullyVerified pasa a false y el envío se detiene hasta que se corrija el registro. verificationStatus en sí permanece en Verified: MailLand restaura automáticamente el estado del registro cuando el DNS vuelve a ser correcto.
Verificación de salud del dominio
Ejecute una verificación de salud a demanda que va más allá de la verificación básica:
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"
}
}Estados de salud
| Estado | Descripción |
|---|---|
healthy | Todas las verificaciones pasan: no se detectaron problemas |
warning | El dominio funciona pero hay mejoras potenciales |
critical | El dominio tiene problemas que pueden impedir la entrega de correo electrónico |
unknown | No se puede determinar el estado (fallo de búsqueda DNS) |
Códigos de error
| Código | Severidad | Descripción |
|---|---|---|
DnsNxDomain | critical | El dominio no existe (confirmado por un segundo resolver independiente) |
SpfMissing | critical | No se encontró ningún registro SPF |
SpfMissingInclude | critical | El registro SPF no incluye spf.mlnd.net |
SpfPermError | critical | Más de un registro SPF (error SPF permanente) |
SpfTooManyLookups | warning | El registro SPF necesita más de 10 consultas DNS |
DkimMissing | critical | No se encontró ningún registro DKIM |
DkimMissingSelector | critical | No hay registro DKIM en el selector de una clave activa |
DkimKeyMismatch | critical | La clave DKIM en DNS no coincide con la clave de MailLand |
DkimRevoked | critical | La clave DKIM se ha revocado (etiqueta p= vacía) |
DmarcMissing | warning | No se encontró ningún registro DMARC |
DmarcNonePolicy | warning | La política DMARC es none (solo supervisión) |
MxMissing | critical | No hay registro MX (solo se comprueba con el correo entrante activado) |
MxWrongHost | warning | El registro MX no apunta a mx.mlnd.net |
DnsTimeout, DnsServFail, DnsLookupFailed | warning | La consulta DNS no terminó; no se concluyó nada sobre el registro |
Historial de salud
Ver resultados históricos de verificaciones de salud. Los parámetros de consulta opcionales from/to (fechas ISO 8601) acotan el rango:
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"
}
]La respuesta es un arreglo simple (sin envoltorio items, sin nextCursor/hasMore).
Solución de problemas
Registro SPF no encontrado
- Asegúrese de tener exactamente un registro TXT de SPF en su dominio raíz
- Múltiples registros SPF causan fallos, combínelos en un único registro
- Verifique que
include:spf.mlnd.netaparece antes del mecanismo~allo-all
Registro DKIM no encontrado
- Verifique que el registro está en
mlnd._domainkey.yourdomain.com(nomlnd._domainkey) - El tipo de registro debe ser TXT (no CNAME)
- Algunos proveedores DNS requieren comillas alrededor de valores TXT largos
- Compruebe si hay espacios o saltos de línea en la clave pública pegada
CNAME de ruta de retorno no encontrado
- Confirme que el CNAME está en
bounce.yourdomain.com(o su subdominio de rebote personalizado) - El valor CNAME debe ser
bounce.mlnd.net(no una dirección IP ni un registro MX) - Usuarios de Cloudflare: asegúrese de que el proxy esté desactivado (nube gris / solo DNS)
Retraso en la propagación DNS
- La mayoría de los cambios DNS se propagan en 5-15 minutos
- Si usa un TTL bajo (300 s), los cambios deberían aparecer rápidamente
- Los registros existentes con TTL alto pueden tardar hasta 48 horas en actualizarse globalmente
- Intente verificar nuevamente después de esperar 15 minutos
Próximos pasos
- Configuración DNS: revisar los registros DNS requeridos
- Rotación de claves DKIM: rotar las claves de firma DKIM
- REST API: comenzar a enviar correo electrónico después de la verificación