MailLandDocs
Dominios

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}/verify

Autentíquese con Authorization: Bearer <token> o X-API-Key: <api key>.

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

Respuesta

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"
}
CampoTipoDescripción
domainIdstringID pública del dominio
domainstringNombre del dominio
isVerifiedbooleantrue solo cuando SPF, DKIM y DMARC son todos valid
spfStatus, dkimStatus, dmarcStatusenumEstado del registro: pending, valid o invalid
verifiedAtdatetimeCuándo se verificó el dominio
messagestringResumen del resultado
dnsRecordsobjectLos registros SPF, DKIM (con dkimSelector) y DMARC encontrados en DNS, o el valor esperado si no se encontró ninguno
spfErrorMessage, dkimErrorMessage, dmarcErrorMessagestringPor qué falló el registro; se omite si pasó
trackingVerified, bounceVerified, mxVerifiedbooleanSi están verificados el dominio de seguimiento personalizado, el dominio de rebote personalizado (Return-Path) y el registro MX de entrada
trackingVerifiedAt, bounceVerifiedAt, mxVerifiedAtdatetimeCuándo se verificó cada uno
trackingErrorMessage, bounceErrorMessage, mxErrorMessagestringPor qué falló alguno de ellos; solo se devuelve para los que tiene activados
lastDnsCheckAtdatetimeCuándo se comprobó el DNS por última vez

Estados de los registros

Cada verificación de registro DNS devuelve uno de estos estados:

EstadoDescripción
pendingAún no comprobado
validRegistro encontrado y correcto
invalidRegistro ausente o incorrecto

Requisitos de verificación

Para que un dominio esté verificado (isVerified: true), SPF, DKIM y DMARC deben ser todos valid:

RegistroRequeridoDebe pasar
SPFSíDebe estar presente include:spf.mlnd.net
DKIMSíClave pública válida para la clave DKIM activa
DMARCSíUn registro en _dmarc que empiece por v=DMARC1 y tenga una política (p=none, p=quarantine o p=reject)
Ruta de retornoNo (activado por defecto en los dominios nuevos; no bloquea el envío)CNAME que apunte a bounce.mlnd.net, solo DNS (sin proxy)
SeguimientoNo (solo con un dominio de seguimiento personalizado)CNAME que apunte a track.mlnd.net, solo DNS (sin proxy)
MX de entradaNo (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:

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"
}

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-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"
  }
}

Estados de salud

EstadoDescripción
healthyTodas las verificaciones pasan: no se detectaron problemas
warningEl dominio funciona pero hay mejoras potenciales
criticalEl dominio tiene problemas que pueden impedir la entrega de correo electrónico
unknownNo se puede determinar el estado (fallo de búsqueda DNS)

Códigos de error

CódigoSeveridadDescripción
DnsNxDomaincriticalEl dominio no existe (confirmado por un segundo resolver independiente)
SpfMissingcriticalNo se encontró ningún registro SPF
SpfMissingIncludecriticalEl registro SPF no incluye spf.mlnd.net
SpfPermErrorcriticalMás de un registro SPF (error SPF permanente)
SpfTooManyLookupswarningEl registro SPF necesita más de 10 consultas DNS
DkimMissingcriticalNo se encontró ningún registro DKIM
DkimMissingSelectorcriticalNo hay registro DKIM en el selector de una clave activa
DkimKeyMismatchcriticalLa clave DKIM en DNS no coincide con la clave de MailLand
DkimRevokedcriticalLa clave DKIM se ha revocado (etiqueta p= vacía)
DmarcMissingwarningNo se encontró ningún registro DMARC
DmarcNonePolicywarningLa política DMARC es none (solo supervisión)
MxMissingcriticalNo hay registro MX (solo se comprueba con el correo entrante activado)
MxWrongHostwarningEl registro MX no apunta a mx.mlnd.net
DnsTimeout, DnsServFail, DnsLookupFailedwarningLa 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-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"
  }
]

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.net aparece antes del mecanismo ~all o -all

Registro DKIM no encontrado

  • Verifique que el registro está en mlnd._domainkey.yourdomain.com (no mlnd._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

En esta página