Guía rápida

De la nada a un mensaje leído por HTTP, en cuatro comandos. Sin cuenta, sin clave, sin SDK.

1. Elige una dirección

Cualquier nombre, en cualquiera de nuestros dominios públicos. No hay nada que llamar ni que registrar: la dirección se vuelve real en el momento en que se le entrega algo.

Mantenla poco predecible si prefieres que nadie entre por casualidad: en un dominio público la dirección es lo único que se interpone entre el buzón y el mundo.

shell
$ ADDR="ci-$(openssl rand -hex 4)@grabmail.io"; echo "$ADDR"

2. Envíale algo

Úsalo en el formulario de registro, el flujo de restablecimiento de contraseña o lo que estés probando. La entrega suele tardar un par de segundos.

Nuestros servidores de correo aceptan mensajes de hasta 5 MB. Cualquier cosa más grande se rechaza en el momento del SMTP, así que se avisa al remitente de inmediato en lugar de dejarlo sin saber.

shell
$ curl -sX POST https://your-app.example/signup --data-urlencode "email=$ADDR"

3. Consulta el buzón

Una solicitud por segundo es el ritmo previsto y nunca se limita. Un buzón vacío responde 200 con count: 0, nunca un 404, así que tu bucle no necesita tratarlo como caso especial.

Este fragmento se rinde tras un minuto en lugar de girar indefinidamente, que es lo que conviene en CI.

sondear hasta que llegue
$ for i in $(seq 60); do
  ID=$(curl -sG https://grabmail.io/api/v1/mailbox --data-urlencode "address=$ADDR" | jq -r '.messages[0].id // empty')
  [ -n "$ID" ] && break
  sleep 1
done; echo "$ID"

4. Léelo y luego descártalo

Descarga el mensaje y extrae lo que buscabas: aquí, un código de seis dígitos de la parte de texto plano.

Eliminarlo es opcional: todo desaparece por sí solo después de 5 días. Hazlo de todos modos en CI, y la siguiente ejecución partirá de un buzón limpio.

leer y eliminar
$ curl -sG https://grabmail.io/api/v1/message/$ID --data-urlencode "mailbox=$ADDR" \
  | jq -r .text | grep -oE '[0-9]{6}'

curl -sX DELETE -G https://grabmail.io/api/v1/message/$ID --data-urlencode "mailbox=$ADDR"

Integrarlo en CI

Dos hábitos evitan que una suite que lee correo real se vuelva inestable:

Una dirección nueva por cada ejecución
Derívala del id de compilación o de un sufijo aleatorio. Reutilizar una dirección entre ejecuciones significa que el mensaje de ayer puede satisfacer la comprobación de hoy.
Un plazo, no un número de reintentos
Sondea contra un límite de tiempo de reloj como el anterior. Los reintentos hacen que el conteo se alargue silenciosamente si tu remitente se vuelve más lento.
No asumir nada sobre el tiempo de entrega
El correo no es síncrono. Verifica que el mensaje llega, no que llega en un segundo concreto.
Usa tu propio dominio para algo real
Un buzón público puede leerlo cualquiera que adivine la dirección. Eso está bien para un registro desechable, y no está bien para un entorno de staging con datos de clientes. Un registro MX lo soluciona.

Para agentes de IA: MCP

Un agente no puede leer esta página, decidir qué endpoint quiere y redactar una solicitud. Pregunta a un servidor qué herramientas existen y las llama. grabmail ejecuta un servidor Model Context Protocol exactamente para eso, en https://grabmail.io/mcp: sin clave, sin cuenta.

Apunta cualquier cliente MCP al endpoint. Claude Desktop, Cursor, Continue y el OpenAI Agents SDK entienden todos esta forma.

Seis herramientas: create_inbox, list_domains, list_messages, read_message, delete_message y wait_for_message.

mcp.json
$ {"mcpServers":{"grabmail":{"url":"https://grabmail.io/mcp"}}}

wait_for_message es el que importa. El motivo por el que un agente quiere un buzón desechable es casi siempre un código de confirmación que se interpone entre él y el siguiente paso. En lugar de consultar en un bucle que consume tokens, pide una dirección, envía el formulario y espera hasta que llega el correo:

Espera hasta 25 segundos y devuelve el mensaje completo: remitente, asunto, cuerpo; o indica que se agotó el tiempo para que el agente simplemente vuelva a llamar.

También puede esperar un mensaje concreto: pasa subject_contains o from_contains y todo lo demás que llegue se ignora.

MCP · wait_for_message
$ curl -sX POST https://grabmail.io/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wait_for_message","arguments":{"address":"you@grabmail.io","subject_contains":"code"}}}'

También hay una especificación OpenAPI 3.1 (YAML) para generadores de código, y llms.txt para lo que prefiera leer texto plano.

Siguiente

Referencia de la API

Cada parámetro, cada código de estado, la forma del error.

Abrir la referencia →

Límites

Qué tiene límite, qué no, y qué ocurre al llegar al tope.

Abrir los límites →

Tu propio dominio

Haz que cada buzón de tu dominio sea privado solo para ti.

Ver la configuración →