# Comprobar los registros de correo

> Comprueba MX, SPF y sus búsquedas DNS, DKIM y DMARC tal como los ven los resolvedores públicos, y configura los registros de un proveedor en un solo cambio.

La **comprobación del correo** mira los registros de correo de un dominio tal como los ven ahora los resolvedores
públicos y avisa de lo que está mal: SPF ausente o duplicado, demasiadas búsquedas SPF, claves DKIM débiles, falta de
DMARC, nombres de correo con proxy y más. Funciona con zonas delegadas y externas y no cambia nada. Para leerla basta
el rol `readonly`; para forzar una comprobación nueva hace falta `tech`.

## Lanzar la comprobación

**Panel**

Abre **DNS › Correo** del dominio. **Comprobación pública** muestra el resultado; **Comprobar de nuevo** la lanza al
momento. El **Resumen** del dominio tiene una tarjeta **Correo** con el peor estado.
**API**

```sh
curl "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/email/check?refresh=1" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
```
`selectors=s1,s2` añade selectores DKIM que buscar (hasta 10). Sin `refresh=1` se reutiliza un resultado del último
minuto.
**MCP**

Pide a tu asistente que compruebe el correo de example.com. Llama a `email_check` (`zone`, y opcionalmente `selectors`
y `refresh`) y resume lo que no está `ok`.


El informe tiene un `summary.status` (el peor de todas las comprobaciones) y una entrada por comprobación, cada una con
un `status` (`ok`, `warn`, `fail` o `info`), un `code` estable y sus `params`. También lista los proveedores detectados
a partir de los MX, los include del SPF y los selectores DKIM.

## Qué se comprueba

| Comprobación | Códigos |
|---|---|
| `mx` | `mx_ok`, `mx_missing` (fail), `mx_null` (info: el dominio declara que no recibe correo), `mx_mixed` (warn: MX de varios proveedores), `mx_no_address` (fail), `mx_cname` (warn) |
| `spf_record` | `spf_ok`, `spf_missing` (fail), `spf_multiple` (fail: más de un registro SPF), `spf_syntax` (fail) |
| `spf_lookups` | `spf_lookups_ok`, `spf_lookups_exceeded` (más de 10 búsquedas DNS, contando los include anidados), `spf_void_exceeded` (más de 2 búsquedas sin respuesta), `spf_loop`, `spf_include_missing`, `spf_include_invalid` |
| `spf_policy` | `spf_all_strict` (`-all`), `spf_all_soft` (`~all`), `spf_all_pass` (fail: `+all`), `spf_all_neutral` (warn: `?all`), `spf_ptr` (warn) |
| `dkim` | `dkim_ok`, `dkim_weak`, `dkim_invalid`, `dkim_revoked`, `dkim_missing` |
| `dmarc` | `dmarc_enforced`, `dmarc_monitoring` (info: `p=none`), `dmarc_missing` (fail), `dmarc_multiple`, `dmarc_invalid`, `dmarc_rua_unauthorized` (warn) |
| `proxied` | `proxied_ok`, `proxied_mail_name` (fail: `mail`, `smtp`, `imap`, `pop`, `mx`, `autodiscover`, `autoconfig` o un destino MX de la zona tiene proxy), `mx_target_proxied` (fail: un MX resuelve al borde de OpenWAF) |
| `conflicts` | `conflicts_ok`, `conflict_cname` (fail: un CNAME junto a otros registros, o el propio dominio es un CNAME en el DNS público) |
| `world` | `world_ok`, `world_mismatch` (warn: los MX, SPF, DMARC o DKIM de la zona no coinciden con lo que ve el mundo), `world_external` (info) |

Cualquier comprobación puede llevar además `lookup_error` (warn) cuando un resolvedor no responde.

### Búsquedas SPF

SPF permite como mucho 10 búsquedas DNS cuando un receptor evalúa el registro (RFC 7208). `include`, `a`, `mx`, `ptr`,
`exists` y `redirect` cuestan una búsqueda cada uno, estén donde estén en el árbol de include; `ip4`, `ip6` y `all` no
cuestan ninguna. El panel muestra el árbol de include con las búsquedas de cada rama.

### Selectores DKIM

OpenWAF busca claves DKIM en los selectores que indiques, en los nombres `*._domainkey` de la zona, en los selectores de
los proveedores conocidos y en algunos habituales (`default`, `selector1`, `k1`, `s1`, `dkim`, `mail`…). Las claves RSA
de menos de 1024 bits no son válidas; las de menos de 2048 se marcan como débiles.

## Configurar un proveedor de correo

**DNS › Correo › Configurar el correo** genera los registros de un proveedor de buzón (Google Workspace, Microsoft 365,
Zoho Mail, Proton Mail, Fastmail, iCloud+ u otro) y de servicios de envío (Amazon SES, Resend, Mailgun, SendGrid,
Brevo, MailerLite):

1. **Proveedores.** Elige un buzón (donde se recibe el correo) y los servicios de envío que uses.
2. **Datos.** Pega los valores que muestra cada proveedor: clave DKIM, código de verificación, región…
3. **Registros.** Revisa los registros exactos que se crean, cambian, se quedan o se borran, y la política DMARC.
   OpenWAF mantiene un único registro SPF que une tus proveedores, cuenta sus búsquedas y nunca endurece un `~all`
   existente sin pedírselo.
4. **Aplicar.** En una zona delegada, los registros se aplican como **una** versión, que puedes revertir desde el
   historial. En una zona externa, créalos a mano en tu proveedor de DNS.


Empieza DMARC con `p=none` y una dirección para los informes: tras 2–4 semanas, cuando los informes muestren solo tus
propios servicios, pasa a `p=quarantine` y después a `p=reject`. La comprobación te lo recuerda mientras la política
siga en `none`.

> **Atención**
>
> Nunca pongas proxy a los nombres de correo. El correo no pasa por el borde, y poner proxy a `mail`, `smtp` o a un
> destino MX rompe la entrega. Consulta [Registros con proxy y solo DNS](https://developers.openwaf.dev/es/fundamentals/proxied-and-dns-only/).
