Volver al blog
Seguridad

Lista de dominios de emails desechables: cómo bloquearlos

Josselin Liebe
Josselin Liebe

Cuando un producto ofrece un plan gratuito, los registros falsos aparecen. La mayoría de los equipos solo nota el problema cuando las tasas de rebote de email suben, la conversión de prueba a pago cae sin explicación, o los créditos de referidos son abusados. Para entonces, el daño ya está hecho.

Trabajamos con una empresa B2B SaaS con un producto freemium. Tenían un flujo de onboarding bien construido, buenos emails de activación y una secuencia drip estructurada. Nada funcionaba como se esperaba. Cuando revisamos los datos de registro juntos, casi una de cada ocho cuentas nuevas había sido creada con una dirección de email desechable. Después de añadir la detección de emails desechables en el registro usando la API de Veille, los registros falsos cayeron más de un 10% en el primer mes. Las métricas de conversión volvieron a ser significativas. Los datos de rendimiento de email finalmente reflejaron la realidad.

Esta guía explica cómo construir esa capa de detección: qué blocklists de código abierto son útiles, dónde se quedan cortas, y cómo combinarlas con verificaciones de API en tiempo real para mantener tu flujo de registro limpio.

¿Qué es un dominio de email desechable?

Un dominio de email desechable pertenece a un servicio que crea bandejas de entrada bajo demanda. No se requiere creación de cuenta. No se verifica ninguna identidad. Los usuarios obtienen una dirección funcional en segundos. La bandeja desaparece después de unos minutos u horas, a veces sin ningún límite de tiempo. La dirección ha desaparecido o sido abandonada mucho antes de que tu email de bienvenida sea enviado.

Los servicios más conocidos incluyen Mailinator, Guerrilla Mail, YOPmail, 10MinuteMail y Temp-Mail. Pero estos son solo los más visibles. Hay cientos de proveedores más pequeños y menos conocidos, incluyendo dominios creados específicamente para evitar las blocklists que apuntan a los más obvios.

No todo el que usa un email desechable intenta abusar de tu plataforma. Los usuarios preocupados por su privacidad, los desarrolladores que prueban integraciones y las personas que evitan emails de marketing tienen razones válidas para usar direcciones temporales. El problema es que los actores maliciosos - personas que crean múltiples cuentas falsas, reclaman trials gratuitos repetidamente o abusan de programas de referidos - también los usan. Y son mucho más difíciles de filtrar después.

El punto clave: los emails desechables son un problema de registro, no un problema de entregabilidad. Los rebotes, el daño al sender score y la reducción de la colocación en bandeja son consecuencias, no causas. Es mejor detener el problema en el formulario de registro que diagnosticarlo desde tus analíticas de email semanas después.

Qué blocklists vale la pena usar

Hay varias listas mantenidas por la comunidad disponibles en GitHub. Difieren en el número de dominios cubiertos, la frecuencia de actualización y la precisión.

disposable-email-domains/disposable-email-domains

Alrededor de 4.000 dominios, actualizados mediante contribuciones de la comunidad que requieren evidencia de soporte. Es la opción cautelosa: menos falsos positivos, pero no cobertura completa. Un buen punto de partida si estás configurando esto por primera vez.

disposable/disposable-email-domains

Alrededor de 100.000 dominios, actualizados automáticamente cada día. Mayor cobertura, pero menos precisa. Algunas entradas incluyen servicios de privacidad que no son verdaderamente desechables. Útil para plataformas de alto riesgo donde prefieres bloquear demasiado antes que demasiado poco - por ejemplo, plataformas de gaming, sitios de cupones o servicios de cripto.

7c/fakefilter

Alrededor de 5.000 dominios, actualizados diariamente, y cada entrada enlaza de vuelta a su fuente. La capacidad de rastrear por qué un dominio está listado es útil cuando investigas un caso donde un usuario real fue bloqueado.

FGRibreau/mailchecker

Disponible como bibliotecas listas para usar para Node.js, PHP, Ruby y otros lenguajes. Una buena opción si prefieres una biblioteca integrada en lugar de un archivo de texto sin formato.

Ninguna de estas listas es completa. Cubren los proveedores más comunes y se mantienen razonablemente actualizadas, pero siempre van detrás de los servicios más nuevos.

Dominios desechables comunes para bloquear

Si necesitas un punto de partida rápido mientras configuras un sistema de detección adecuado, estos dominios aparecen frecuentemente en actividad de registro falso:

mailinator.com
guerrillamail.com
temp-mail.org
yopmail.com
10minutemail.com
trashmail.com
emailondeck.com
maildrop.cc
sharklasers.com
guerrillamailblock.com
grr.la
mailnesia.com
getnada.com
mohmal.com
throwam.com
dispostable.com
tempail.com
fakeinbox.com
throwaway.email
tempinbox.com

Esta lista es una medida temporal, no una solución a largo plazo. Nuevos dominios desechables aparecen cada semana. Algunos desaparecen rápidamente, otros permanecen activos durante meses. Una lista que nunca se actualiza perderá todo lo creado después de su última edición.

Por qué las listas estáticas se quedan obsoletas

Los servicios de email desechable están cambiando. Muchos ahora ofrecen APIs REST o GraphQL, lo que significa que una persona puede crear una nueva dirección de email automáticamente, sin abrir un navegador. Un nuevo dominio desechable puede configurarse y estar listo para recibir email en una hora, mucho antes de que aparezca en cualquier lista pública.

Algunos atacantes no usan servicios existentes en absoluto. En cambio, registran dominios de bajo coste, configuran ajustes básicos de servidor de correo, usan la dirección una vez y siguen adelante. Estos dominios parecen legítimos ante cualquier verificación de lista estática. La única manera de detectarlos es analizando señales como la configuración DNS, cuándo fue registrado el dominio y si el servidor de correo responde correctamente.

Aquí es donde las listas estáticas alcanzan su límite. Funcionan bien para bloquear proveedores conocidos sin añadir latencia, ya que la verificación es solo una búsqueda en un conjunto de valores conocidos. Pero no pueden cubrir dominios personalizados de uso único o servicios recién creados.

Detección en tiempo real con la API de Veille

La API de Validación de Email de Veille (GET /v1/intelligence/email) verifica direcciones de email contra una base de datos continuamente actualizada de más de 100.000 dominios desechables conocidos, combinada con análisis DNS y de servidor de correo en tiempo real. Devuelve:

  • disposable - true si el dominio es un proveedor desechable conocido
  • risk_score - una puntuación de 0 (seguro) a 100 (alto riesgo), combinando todas las señales disponibles
  • role_account / role_type - detecta bandejas compartidas como info@, noreply@ o admin@
  • dns.mx - si el dominio tiene un servidor de correo válido y configurado
  • smtp_valid - si la bandeja específica puede recibir email (disponible con qualification_check=true)

El campo risk_score es el más útil para tomar decisiones con matices. En lugar de bloquear o permitir de forma binaria, puedes definir umbrales: dejar pasar puntuaciones bajas, requerir verificación adicional para puntuaciones medias y rechazar puntuaciones altas directamente en el formulario.

Cómo implementar el bloqueo de emails desechables

Python - verificación en una blocklist estática

Descarga la lista de GitHub y guárdala en memoria. Hazlo una vez cuando la aplicación inicia, o de forma programada, no en cada solicitud.

import requests

BLOCKLIST_URL = (
    "https://raw.githubusercontent.com/"
    "disposable-email-domains/disposable-email-domains/"
    "refs/heads/main/disposable_email_blocklist.conf"
)

def load_blocklist() -> set[str]:
    response = requests.get(BLOCKLIST_URL, timeout=10)
    return set(response.text.strip().splitlines())

DISPOSABLE_DOMAINS = load_blocklist()

def is_known_disposable(email: str) -> bool:
    domain = email.rsplit("@", 1)[-1].lower()
    return domain in DISPOSABLE_DOMAINS

Actualiza la lista una vez a la semana usando una tarea programada. La lista cambia con suficiente frecuencia como para que una versión antigua pierda abusos reales, pero no tan frecuentemente como para necesitar actualizarla continuamente.

Python - usando la API de Veille para detección en tiempo real

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.veille.io/v1"

def validate_email(email: str) -> dict:
    response = requests.get(
        f"{BASE_URL}/intelligence/email",
        params={"query": email},
        headers={"x-api-key": API_KEY},
        timeout=3,
    )
    response.raise_for_status()
    return response.json()

def signup_gate(email: str) -> tuple[bool, str]:
    data = validate_email(email)

    if data["disposable"]:
        return False, "Please use a permanent email address to sign up."

    if data["risk_score"] >= 75:
        return False, "We could not verify this email address. Please try a different one."

    return True, ""

TypeScript - middleware de validación para Express

import express, { Request, Response, NextFunction } from "express";

const API_KEY = "YOUR_API_KEY";
const BASE_URL = "https://api.veille.io/v1";

interface EmailValidation {
  disposable: boolean;
  risk_score: number;
  smtp_valid: boolean;
}

async function validateEmailMiddleware(
  req: Request,
  res: Response,
  next: NextFunction
): Promise<void> {
  const { email } = req.body as { email: string };

  try {
    const response = await fetch(
      `${BASE_URL}/intelligence/email?query=${encodeURIComponent(email)}`,
      { headers: { "x-api-key": API_KEY }, signal: AbortSignal.timeout(3000) }
    );

    const data = (await response.json()) as EmailValidation;

    if (data.disposable || data.risk_score >= 75) {
      res.status(422).json({ error: "This email address cannot be used for registration." });
      return;
    }

    next();
  } catch {
    // If the API is unreachable, allow the request through and log the failure
    console.warn(`[veille] email validation failed for ${email}, allowing through`);
    next();
  }
}

const app = express();
app.use(express.json());
app.post("/auth/signup", validateEmailMiddleware, (req, res) => {
  res.json({ status: "ok" });
});

Una nota importante de implementación: si la API de validación no está disponible o devuelve un error, permite que la solicitud pase. No bloquees usuarios por un problema de red. Registra el fallo y revisa esos registros por separado.

Dónde añadir la validación

El formulario de registro es el lugar más importante, pero no el único:

  • Flujos de cambio de email - un usuario existente que cambia a una dirección desechable es una señal de alerta
  • Formularios de lista de espera y acceso anticipado
  • Formularios de cupones y códigos promocionales
  • Registro en programas de referidos

Cuanto antes detectes una dirección desechable, menos trabajo tendrás que hacer después para limpiar tus datos.

Cómo evitar falsos positivos

Algunos servicios legítimos generan direcciones de email que se parecen a las desechables. Apple Hide My Email, Firefox Relay, alias de Proton Mail, SimpleLogin y addy.io crean direcciones de reenvío con patrones inusuales. Una blocklist demasiado estricta puede bloquearlos por error.

La diferencia importante: estas direcciones reenvían a una bandeja real perteneciente a una persona real que eligió proteger su privacidad. Bloquear a estos usuarios significa perder clientes reales, no prevenir fraudes.

Dos pasos ayudan a evitar este problema. Primero, mantén una lista de servicios de relay de privacidad conocidos y omite todas las verificaciones para esos dominios:

PRIVACY_RELAY_DOMAINS = {
    "privaterelay.appleid.com",
    "relay.firefox.com",
    "simplelogin.co",
    "addy.io",
    "anonaddy.com",
}

def should_skip_check(email: str) -> bool:
    domain = email.rsplit("@", 1)[-1].lower()
    return domain in PRIVACY_RELAY_DOMAINS

Segundo, usa umbrales de risk_score en lugar de coincidencia de dominio simple. Una dirección de reenvío de un servicio de privacidad conocido tendrá típicamente una puntuación baja. Un dominio desechable desconocido creado la semana pasada tendrá una puntuación alta. Aquí es donde la API de Veille aporta más valor.

Antes de activar cualquier lógica de bloqueo en producción, ejecútala en modo de prueba durante una semana: registra lo que habría sido bloqueado sin rechazar realmente ninguna solicitud. Revisa los resultados manualmente. Si aparecen usuarios reales en los registros, ajusta tus umbrales.

Un enfoque por capas

Ninguna verificación única es suficiente. Una configuración fiable combina varias capas:

  1. Lista de permitidos de relay de privacidad - verificada primero; las direcciones de estos dominios omiten todas las demás verificaciones
  2. Blocklist estática - búsqueda rápida, bloquea los proveedores desechables más conocidos inmediatamente
  3. API de Veille - verificación en tiempo real para todo lo que pasó la lista estática, usando disposable, dns.mx y risk_score
  4. Comportamiento post-registro - las cuentas que nunca abren un email, nunca completan el onboarding y no muestran actividad después de 7 días deben revisarse, independientemente de cómo pasaron las verificaciones iniciales

Lógica de decisión:

Señal Acción
Dominio en lista de permitidos de relay de privacidad Permitir
Dominio en blocklist estática Rechazar en formulario de registro
disposable: true de la API Rechazar en formulario de registro
risk_score ≥ 75 Rechazar en formulario de registro
risk_score 50–74 Permitir y marcar para revisión manual
Sin actividad después de 7 días Archivar y eliminar de listas activas

Preguntas frecuentes

¿Con qué frecuencia debo actualizar la blocklist?

Una vez a la semana es suficiente para la mayoría de los equipos. Configura una tarea automatizada para descargar la última versión y recargarla en memoria. Actualizar con más frecuencia aporta poco beneficio; actualizar con menos frecuencia significa perder proveedores recién identificados.

¿Debo bloquear direcciones basadas en roles como info@empresa.com?

Depende de tu producto. Para registros de consumidores, las direcciones compartidas como info@ o admin@ son a menudo señal de un lead de baja calidad o una bandeja compartida. Para productos de negocio, estas pueden ser la única dirección disponible públicamente de una empresa. Usa el campo role_account de la API de Veille para marcarlos por separado en lugar de bloquear directamente, y después gestiónalos con un flujo de onboarding diferente.

¿Qué pasa con los dominios catch-all?

Algunos dominios aceptan email enviado a cualquier dirección, aunque no exista ninguna bandeja real para esa dirección. Una blocklist estática no puede detectar esto. Usa smtp_valid con qualification_check=true en la API de Veille para verificar que una bandeja específica puede recibir email, no solo que el dominio está configurado.

¿Puedo bloquear todos los proveedores de email gratuitos?

No. La mayoría de los usuarios legítimos se registran con proveedores gratuitos como Gmail, Outlook o Yahoo. Bloquear proveedores gratuitos eliminaría la mayoría de tus usuarios reales. La distinción correcta es entre desechable y permanente, no entre gratuito y de pago.

¿Existe una lista que cubra todos los dominios desechables?

No. Se crean nuevos servicios de email desechable regularmente, a menudo con el objetivo específico de evitar las blocklists existentes. El enfoque más eficaz es combinar una lista estática para proveedores conocidos con una API en tiempo real para todo lo demás.

Recursos de Veille

Veille rastrea más de 953 proveedores de emails desechables, organizados en 9 categorías: bandejas de 10 minutos, servicios temporales, direcciones burner, bandejas de basura, generadores de emails falsos, servicios de reenvío anónimo, servicios de alias y relay, herramientas de privacidad y otros. La base de datos se actualiza cada semana.

Dos herramientas gratuitas para usar junto a esta guía:

  • Directorio de proveedores de emails desechables - navega por los más de 953 proveedores rastreados, con una etiqueta de categoría y descripción para cada uno
  • Herramienta de comparación de blocklists - introduce cualquier dominio y comprueba si está listado en 12 blocklists de código abierto a la vez, incluyendo disposable-email-domains/disposable-email-domains, disposable/disposable-email-domains, 7c/fakefilter, FGRibreau/mailchecker y más

Para la detección en tiempo real en el registro - donde necesitas disposable, risk_score y smtp_valid devueltos inmediatamente - la API de Validación de Email de Veille gestiona lo que ninguna lista estática puede.

Artículos relacionados