Cómo crear tu propio correo desechable tipo YOPmail
Cómo crear tu propio correo desechable tipo YOPmail
Crea tu propio correo desechable con tu dominio, Cloudflare Email Routing y Mailpit en tu homelab, sin bandejas públicas ni puertos abiertos en tu router.
Si no estás muy enterado de qué hace YOPmail, te lo comento brevemente: es un servicio que te permite tener un correo temporal, anónimo y desechable. Si no quieres poner tu correo personal en ese servicio que solo quieres probar a ver si te gusta, te registras con cualquiercosa@yopmail.com, entras a YOPmail, escribes ese correo y ahí tendrás el inbox de esa dirección 📬.
En cuanto a casos de uso, uno es el que te comento: solo quieres probar un servicio sin comprometer tu correo personal con campañas de marketing ni nada del estilo. El segundo es que seas desarrollador y requieras probar la creación de usuarios constantemente. Todo muy ideal, pero con algunos peros 🤔. Las cuentas de YOPmail son completamente públicas, así que cualquiera a quien se le haya ocurrido la misma dirección verá esos correos. Por otro lado, algunos servicios ya empiezan a bloquear el registro de usuarios con YOPmail o servicios parecidos 🚫.
Nota: Sé que una alternativa sería usar algo como
direcciondecorreo+prueba@gmail.com, pero ensuciarías tu inbox con correos de prueba o simplemente basura 🗑️. La idea de este artículo es mostrarte una alternativa self-hosted para tener un inbox ajeno a tu correo personal y que realmente no te importe si se pierde.

Prerrequisitos
- Una cuenta de Cloudflare (el plan gratuito es suficiente).
- Un dominio propio donde el DNS esté gestionado por Cloudflare.
- Email Routing activado en ese dominio.
- Una instancia de cloudflared corriendo en tu homelab.
- Mailpit corriendo en tu red local.
Cómo funciona a grandes rasgos ⚙️
Alguien envía un correo a cualquierdireccion@tudominio.dev. Cloudflare lo recibe gracias a Email Routing y, mediante una regla catch-all, se lo pasa a un Worker de Cloudflare. El Worker no modifica el mensaje: abre una conexión hacia tu red local usando Workers VPC.
Esa conexión viaja por el túnel de cloudflared, que la lleva hasta Mailpit, donde el correo queda guardado y visible en su interfaz web. Como el túnel lo inicia cloudflared desde tu casa, no necesitas abrir ningún puerto en tu router 🔒.
Ahora sí, manos a la obra 🛠️
Empecemos con tu red local. Aquí necesitarás el siguiente archivo de Docker Compose, que crea tu instancia de Mailpit y la de cloudflared, que nos dará la conexión VPC con Cloudflare.
name: junkmail
services:
mailpit:
image: axllent/mailpit:latest
container_name: junkmail-mailpit
restart: unless-stopped
environment:
MP_DATABASE: /data/mailpit.db
MP_LABEL: junkmail
MP_MAX_AGE: 7d
MP_MAX_MESSAGES: 5000
ports:
# SMTP: the Email Worker reaches it through the tunnel over the LAN.
- "1025:1025"
# Web UI: LAN only.
- "8025:8025"
volumes:
- ./data:/data
tunnel:
container_name: cloudflared-tunnel
image: cloudflare/cloudflared
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=TU-TOKEN-DE-CLOUDFLARE
Localmente es todo lo que necesitas. Con esto podrás acceder al inbox de Mailpit vía localhost:8025. Ya si usas Nginx o algún otro servicio, puedes asignarle un dominio más apropiado, eso queda en ti 😉.
Desplegar el Worker 🚀
1. Clona el repositorio e instala las dependencias
git clone https://github.com/Anb98/junkmail-worker.git
cd junkmail-worker
npm install
El repositorio contiene el código del Worker y su configuración. npm install descarga Wrangler, la herramienta oficial de Cloudflare para desplegar Workers.
2. Crea un API token de Cloudflare 🔑
Con tu sesión de Cloudflare iniciada, haz clic en tu avatar y entra a My Profile. Ahí verás la sección API Tokens. Presiona Create Token.

En API token templates, elige Edit Cloudflare Workers y presiona Use template.

La plantilla trae casi todos los permisos necesarios, pero le falta uno. Agrega este permiso: Account → Connectivity Directory → Admin. Sin él, el despliegue falla, porque el Worker no puede vincularse a tu túnel.

Más abajo, en Account Resources elige tu cuenta y en Zone Resources, tu dominio. Luego presiona Continue to summary y después Create Token.
⚠️ Cuidado: Copia el token en ese momento, porque Cloudflare solo te lo muestra una vez.
3. Guarda el token en el proyecto
Dentro del proyecto crea un archivo .env y reemplaza tu-token-aquí por el token que copiaste:
CLOUDFLARE_API_TOKEN=tu-token-aquí
💡 Tip: El repositorio incluye un
.env.example, así que también puedes copiarlo concp .env.example .envy reemplazarYOUR-API-TOKENpor tu token.
Wrangler lee este archivo automáticamente al desplegar.
4. Ajusta la configuración del Worker
Abre wrangler.toml y reemplaza estos dos valores:
tunnel_id(YOUR-TUNNEL-ID): el ID de tu túnel decloudflared. Lo encuentras en el panel de Cloudflare, enZero Trust → Networks → Tunnels, junto al nombre de tu túnel.MAILPIT_ADDR(MAILPIT-HOST:1025): la dirección con la quecloudflaredllega a Mailpit dentro de tu red, por ejemplo192.168.1.10:1025. Usa la IP de la máquina donde corre Mailpit, en mi caso mi NAS con ZimaBlade.
💡 Tip: Si quieres otro nombre para el Worker, cambia también
name = "junkmail".
5. Despliega
npm run deploy
Si todo sale bien, Wrangler mostrará que el Worker junkmail quedó desplegado 🎉.
Configurar Email Routing 📧
En el panel de Cloudflare, entra a tu dominio y ve a Email → Email Routing → Routing rules. Al final de la página verás la regla Catch-all address, que existe por defecto. Presiona Edit.

En Action, elige Send to a Worker. En Destination, elige junkmail o el nombre que le hayas puesto al Worker.

Guarda y verifica que la regla esté activada: por defecto viene deshabilitada.
Ahora solo te queda a ti hacer la prueba: envía un correo desde cualquier cuenta a loquesea@tudominio.dev y debería aparecer en Mailpit en pocos segundos 📨.
Y listo, ya tienes tu propio YOPmail privado, sin bandejas públicas y con un dominio que nadie tiene en su lista de bloqueo 😎. ¿Tú qué usas para tus correos de prueba? Cuéntame en los comentarios. Y si te gustan las soluciones self-hosted, checa No más .env perdidos: Una solución self-hosted.