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.
$ 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.
$ 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.
$ 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.
$ 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.
$ {"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.
$ 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.
Límites
Qué tiene límite, qué no, y qué ocurre al llegar al tope.
Tu propio dominio
Haz que cada buzón de tu dominio sea privado solo para ti.