Guías

Cómo bloquear correos desechables en el registro

Tres formas de detectar correos temporales en tu formulario de registro, de una lista fija a una API, con código, y los errores que bloquean a usuarios reales.

7 min de lectura · Actualizado el 2026-10-31 · Attrelix

Qué cuenta como correo desechable

Una dirección desechable (o temporal) viene de un servicio que entrega buzones sin registro, normalmente durante minutos u horas. Mailinator, Guerrilla Mail, 10 Minute Mail y miles de dominios menos conocidos funcionan así. Son útiles para quien quiere evitar boletines, e igual de útiles para quien crea muchas cuentas.

Tres categorías vecinas se suelen confundir con ellos y necesitan un trato distinto:

  • Relays de privacidad como privaterelay.appleid.com de Iniciar sesión con Apple, duck.com de DuckDuckGo o Firefox Relay reenvían a un buzón real y duradero. Bloquearlos perjudica a clientes preocupados por la privacidad. Trátalos, como mucho, como una señal de riesgo pequeña.
  • Proveedores gratuitos como Gmail, Outlook.com o Yahoo no son desechables. Su patrón de abuso es otro: alias de un mismo buzón, tratados en nuestra guía de alias de Gmail.
  • Dominios que ni siquiera reciben correo — errores como gmial.com o dominios inventados. También vale la pena detectarlos, porque nadie puede confirmar una cuenta ahí.

Opción 1: una lista fija en tu código

En GitHub se mantienen listas abiertas de dominios desechables con decenas de miles de entradas. Lo más sencillo es cargar una en un conjunto y comprobar el dominio en el registro:

# Python
DISPOSABLE = set(open("disposable_domains.txt").read().split())

def is_disposable(email: str) -> bool:
    domain = email.rsplit("@", 1)[-1].strip().lower().rstrip(".")
    parts = domain.split(".")
    # también subdominios: mail.tempdomain.com -> tempdomain.com
    return any(".".join(parts[i:]) in DISPOSABLE for i in range(len(parts) - 1))

No cuesta nada y no añade latencia. Los inconvenientes:

  • Se queda vieja. Aparecen dominios desechables nuevos todo el tiempo, y muchos servicios rotan dominios precisamente para esquivar las listas. Una lista copiada hace seis meses no tiene los más nuevos, que son justo los que usan los abusadores.
  • Las listas no coinciden. Cada lista incluye dominios distintos, y algunas tienen errores. Combinar varias da más cobertura pero más mantenimiento.
  • Necesitas un proceso de actualización y un despliegue (o recarga) cada vez que cambia.

Opción 2: comprobar el servidor de correo (MX)

Una consulta DNS de los registros MX del dominio te dice si puede recibir correo. Detecta errores tipográficos y dominios inventados que ninguna lista contiene:

# Python, con dnspython
import dns.resolver

def can_receive_mail(domain: str) -> bool:
    try:
        return len(dns.resolver.resolve(domain, "MX", lifetime=2)) > 0
    except dns.resolver.NXDOMAIN:
        return False
    except Exception:
        return True  # un problema de DNS no es culpa del usuario: dejar pasar

Guarda el resultado en caché por dominio, usa un timeout corto y nunca rechaces un registro porque tu resolvedor DNS tuvo un mal momento. Ten en cuenta que la comprobación MX no detecta servicios desechables: reciben correo perfectamente, es su trabajo.

Opción 3: una API que hace ambas cosas y se mantiene al día

Una API saca de tu código el mantenimiento de la lista y las consultas MX. Attrelix combina varias listas públicas, las actualiza a diario, registra cuándo se vio cada dominio por primera vez, comprueba el servidor de correo y normaliza los alias de Gmail en la misma llamada — y además puntúa la red y el dispositivo, así que obtienes una decisión por registro y no solo un veredicto sobre el correo. Puedes probar la consulta de dominios gratis en el verificador de correo desechable.

curl https://attrelix.com/v1/check \
  -H "Authorization: Bearer $ATTRELIX_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"email":"someone@mailinator.com","ip":"203.0.113.9"}'

La respuesta incluye email.disposable, email.relay, email.mx y la dirección normalizada, junto con la decisión global y sus motivos.

Errores que bloquean a usuarios reales

  • Bloquear relays. El relay privado de Apple lo usan muchos usuarios de iPhone que inician sesión con Apple. Bloquearlo los bloquea a ellos.
  • Bloquear por errores de DNS. Un timeout no demuestra que un dominio sea falso.
  • Listas demasiado amplias. Algunas listas comunitarias incluyen pequeños proveedores legítimos o dominios de empresas. Si un cliente se queja, permite el dominio en lugar de discutir.
  • Un mensaje de error sin salida. “Correo no válido” confunde a una persona real que escribió una dirección real. Di que no se aceptan buzones temporales y pide otra dirección.

Lo que una comprobación de desechables no detecta

Bloquear dominios desechables sube un poco el coste del abuso: el abusador se pasa a Gmail. A partir de ahí, el abuso aparece como muchas cuentas detrás de un buzón o de un dispositivo. Ahí entra detectar cuentas múltiples.

Resumen

  • Separa dominios desechables, relays de privacidad, proveedores gratuitos y dominios muertos.
  • Una lista fija es un buen comienzo pero envejece; actualízala o usa una API.
  • Usa comprobaciones MX para dominios muertos y deja pasar si hay problemas de DNS.
  • Espera que los abusadores se pasen a alias de Gmail y normaliza las direcciones.

Más guías