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"Si la dirección es rechazada
Ocurre, y no es un fallo. Los dominios públicos figuran en las listas negras públicas de correo desechable, y buena parte de los formularios de registro las consultan. Cambiar la parte anterior a la @ no sirve — es el dominio lo que se rechaza.
Apunte su propio dominio hacia nosotros y el problema desaparece, gratis: conectar un dominio. Si prefiere no usar el suyo, un plan de pago abre 92 dominios .com privados, fuera de esas listas — las mismas cuatro llamadas, más una cabecera Authorization: Bearer. Ver los planes.
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 — y los dominios públicos están impresos en este sitio, así que se adivinan. En un dominio propio, una dirección solo la encuentra quien ya la conoce. Un registro MX, y nada más que hacer.
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
Un registro MX, y cada dirección de tu dominio funciona aquí — nada que registrar.