Mulai cepat

Dari nol sampai pesan terbaca kembali lewat HTTP, dalam empat perintah. Tanpa akun, tanpa kunci, tanpa SDK.

1. Pilih sebuah alamat

Nama apa pun, pada salah satu domain publik kami. Tidak ada yang perlu dipanggil dan tidak ada yang perlu didaftarkan — alamat itu menjadi nyata begitu sesuatu terkirim ke sana.

Jagalah agar sulit ditebak jika Anda tidak ingin ada yang nyasar masuk: pada domain publik, alamat itu adalah satu-satunya penghalang antara kotak masuk dan dunia luar.

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

2. Kirim sesuatu ke alamat itu

Gunakan di formulir pendaftaran, alur reset kata sandi, atau apa pun yang sedang Anda uji. Pengiriman biasanya hanya beberapa detik.

Server mail kami menerima pesan hingga 5 MB. Yang lebih besar akan ditolak pada saat SMTP, sehingga pengirim langsung diberi tahu alih-alih dibiarkan menunggu.

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

3. Poll kotak masuk

Satu permintaan per detik adalah irama yang dimaksudkan dan tidak pernah dibatasi. Kotak masuk kosong dijawab dengan 200 dan count: 0 — tidak pernah 404, sehingga loop Anda tidak perlu menangani kasus khusus itu.

Cuplikan ini menyerah setelah satu menit, bukan berputar terus, yang memang Anda inginkan di CI.

polling sampai pesan tiba
$ 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. Baca, lalu buang

Ambil pesan tersebut dan ambil apa pun yang Anda cari — di sini, kode enam digit dari bagian teks biasa.

Menghapus bersifat opsional: semuanya akan hilang dengan sendirinya setelah 5 hari. Tetap lakukan di CI, dan proses berikutnya dimulai dari kotak masuk yang bersih.

baca dan hapus
$ 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"

Menghubungkannya ke CI

Dua kebiasaan ini menjaga rangkaian pengujian yang membaca email sungguhan agar tidak menjadi tidak stabil:

Alamat baru untuk setiap kali dijalankan
Turunkan dari build id atau akhiran acak. Memakai ulang satu alamat di berbagai run berarti pesan kemarin bisa memenuhi asersi hari ini.
Sebuah tenggat waktu, bukan jumlah percobaan ulang
Poll dengan batas waktu jam dinding seperti di atas. Jumlah percobaan ulang diam-diam bertambah panjang seiring pengirim Anda melambat.
Jangan pernah berasumsi tentang waktu pengiriman
Surat tidak bersifat sinkron. Pastikan pesan tiba, bukan bahwa pesan tiba dalam detik tertentu.
Gunakan domain Anda sendiri untuk hal yang sungguhan
Kotak surat publik dapat dibaca oleh siapa pun yang menebak alamatnya. Itu tidak masalah untuk pendaftaran sekali pakai, tapi bermasalah untuk lingkungan staging dengan data pelanggan. Satu record MX memperbaikinya.

Untuk agen AI: MCP

Sebuah agent tidak bisa membaca halaman ini, memutuskan endpoint mana yang diinginkan, lalu menulis permintaan. Ia bertanya kepada server tentang tool apa saja yang tersedia dan memanggilnya. grabmail menjalankan server Model Context Protocol khusus untuk itu, di https://grabmail.io/mcp — tanpa kunci, tanpa akun.

Arahkan klien MCP apa pun ke endpoint tersebut. Claude Desktop, Cursor, Continue, dan OpenAI Agents SDK semuanya membaca bentuk ini.

Enam tool: create_inbox, list_domains, list_messages, read_message, delete_message, dan wait_for_message.

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

wait_for_message adalah yang paling penting. Alasan sebuah agent menginginkan kotak masuk sekali pakai hampir selalu adalah kode konfirmasi yang berdiri di antara agent itu dan langkah berikutnya. Alih-alih melakukan polling dalam loop yang menghabiskan token, ia meminta sebuah alamat, mengirim formulir, dan menunggu hingga email tiba:

Menunggu hingga 25 detik dan mengembalikan pesan secara lengkap — pengirim, subjek, isi — atau menyatakan waktu habis sehingga agent tinggal memanggil lagi.

Juga bisa menunggu pesan tertentu: kirim subject_contains atau from_contains dan yang lainnya yang masuk akan diabaikan.

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"}}}'

Tersedia juga spesifikasi OpenAPI 3.1 (YAML) untuk generator kode, dan llms.txt untuk apa pun yang lebih suka membaca teks biasa.

Berikutnya

Referensi API

Setiap parameter, setiap kode status, bentuk error.

Buka referensi →

Batasan

Apa yang dibatasi, apa yang tidak, dan apa yang terjadi pada batas maksimum.

Buka halaman batasan →

Domain Anda sendiri

Jadikan setiap kotak masuk di domain Anda privat hanya untuk Anda.

Lihat cara pengaturannya →