Gratis durante la beta
Prueba lo que pasa después de enviar un correo.
Rebotes, quejas de spam, greylisting, bloqueos por lista negra, buzones llenos. Relayo Sim responde como los servidores de correo reales, para que tu aplicación los maneje bien antes de que ocurran en producción.
Por SMTP o por API HTTP. Sin tarjeta.
await relayo.email.send({
from: { address: '[email protected]' },
to: { address: '[email protected]' },
subject: 'Confirma tu cuenta',
});
// Tu webhook recibe, firmado y normalizado:
relayo.on('bounced', (e) => markInvalid(e.recipient));
Cómo funciona
Una dirección de correo elige lo que pasa.
Nada que configurar por test: el destinatario es el escenario.
Envía a una dirección de escenario
Por SMTP desde cualquier librería, o por la API HTTP. [email protected] acepta al tercer intento.
Responde como el mundo real
Códigos SMTP y ampliados correctos, rechazos en RCPT o tras DATA, informes DSN y ARF por correo, aplazamientos con el tiempo que pidas.
Tu app recibe los eventos
Webhooks firmados con el modelo de eventos de Relayo: el mismo que usarás con SES, SendGrid, Resend, Postmark o Mailgun.
Escenarios
Los fallos que tu aplicación debería saber manejar.
Cada rebote viene clasificado: duro (la dirección no sirve), suave (temporal) o bloqueo (revisa tu configuración y conserva el contacto).
Rebotes
hard-bounce@El buzón no existe: 550 5.1.1no-mx@El dominio no recibe correo: 550 5.1.2mailbox-full@Buzón lleno: 452 4.2.2 en cada intentotoo-large@Mensaje demasiado grande: 552 5.3.4timeout@El receptor no responde a DATA
Bloqueos
blocked@Rechazado por política: 550 5.7.1blocklisted@Tu IP en una lista negra: 554 5.7.1dmarc@Fallo de SPF, DKIM o DMARC: 550 5.7.26suppressed@En la lista de supresión, nunca se intenta
Aplazamientos
greylist+3@451 4.7.1 hasta el tercer intentorate-limit@El receptor te limita: 421 4.7.28delay+30m@Se entrega tarde, aplazado mientras tanto
Después de la entrega
complaint@Lo marcan como spam (informe ARF)unsubscribe@El destinatario se da de bajaengaged@Se abre y se hace cliccualquier@Cualquier otra dirección se entrega
Todas en @sim.relayo.dev. Añade +async para que SMTP acepte y el rebote llegue después, como en un relay.
Bandeja de captura
Mira el correo que enviaste de verdad.
- Vista previa a ancho de escritorio o de móvil, en un marco aislado sin scripts.
- Texto, HTML y cabeceras tal como llegaron, y el original en
.eml. - Adjuntos para descargar, e imágenes
cid:en su sitio. - La línea de tiempo de cada destinatario al lado: qué respondió el servidor y cuándo.
- De
- Empresa S.A. <[email protected]>
- Para
- [email protected]
- Asunto
- Tu factura de octubre
En tu CI
Que el build falle si un rebote no se maneja.
La CLI @alimzen/cli espera el evento que tu código tiene que tratar. La acción de GitHub deja en cada ejecución un resumen de todos los correos enviados.
- uses: Alimzen/relayo/actions/sim@main
with:
url: ${{ vars.RELAYO_SIM_URL }}
api-key: ${{ secrets.RELAYO_SIM_API_KEY }}
- run: npm test
- run: npx @alimzen/cli wait --search "Confirma tu cuenta" \
--for bounced:hard --timeout 1m
- uses: Alimzen/relayo/actions/sim@main
if: always()
with: { step: report }
$ npx relayo wait sim_8c1f --for bounced:hard
✓ sim_8c1f: bounced:hard · user_unknown · 550 5.1.1
$ npx relayo wait sim_93ab --for delivered --timeout 30s
✗ No "delivered" event after 30s.
Seen:
sim_93ab: deferred ([email protected])
$ echo $?
1
Funciona con lo que ya usas
Sin cambiar tu código de envío.
SMTP
Nodemailer, Django, Rails, Laravel, Spring… Apunta el host al simulador y usa tu clave como contraseña.
API HTTP
Un POST /v1/messages con el mismo cuerpo que la librería Relayo.
Relayo
El driver @alimzen/simulator en tests y CI; SES, SendGrid o Resend en producción.
NestJS
@alimzen/nestjs: módulo, servicio y @OnRelayoEvent() para tus handlers.
Empieza a probar tus rebotes hoy.
Crea una cuenta, copia tu clave y envía tu primer correo a [email protected].