البدء السريع

من لا شيء إلى رسالة تُقرأ عبر HTTP، في أربعة أوامر. بلا حساب، بلا مفتاح، بلا SDK.

1. اختر عنوانًا

أي اسم، على أي من نطاقاتنا العامة. لا شيء لاستدعائه ولا شيء للتسجيل — يصبح العنوان حقيقيًا لحظة تسليم شيء إليه.

اجعله غير قابل للتخمين إن كنت تفضّل ألا يتجول فيه أحد: على نطاق عام، العنوان هو الشيء الوحيد الفاصل بين صندوق البريد والعالم.

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

2. أرسل إليه شيئًا

استخدمه في نموذج التسجيل، أو تدفق إعادة تعيين كلمة المرور، أو أيًّا ما كنت تختبره. التسليم عادةً في غضون ثوانٍ قليلة.

تقبل خوادم بريدنا رسائل حتى 5 MB. أي شيء أكبر يُرفَض وقت SMTP، فيُخبَر المُرسِل فورًا بدلًا من تركه في حيرة.

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

3. استطلع صندوق البريد

طلب واحد في الثانية هو الإيقاع المقصود ولا يُقيَّد أبدًا. صندوق البريد الفارغ يجيب بـ200 مع count: 0 — أبدًا 404، فلا تحتاج حلقتك إلى معاملته كحالة خاصة.

تتوقف هذه المقتطفة بعد دقيقة بدلًا من الدوران إلى الأبد، وهذا ما تريده في 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. اقرأها ثم تخلَّص منها

اجلب الرسالة واستخرج منها ما جئت من أجله — هنا، رمز مكوَّن من ستة أرقام من الجزء النصي العادي.

الحذف اختياري: كل شيء يزول من تلقاء نفسه بعد 5 يومًا. افعله على أي حال في CI، وتبدأ الجولة التالية من صندوق بريد نظيف.

القراءة والحذف
$ 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"

دمجه في CI

عادتان تحافظان على مجموعة اختبارات تقرأ بريدًا حقيقيًا من أن تصبح غير مستقرة:

عنوان جديد لكل تشغيل
اشتقّه من معرّف البنية أو من لاحقة عشوائية. إعادة استخدام عنوان واحد عبر التشغيلات المتكررة تعني أن رسالة الأمس قد تُرضي اختبار اليوم.
مهلة زمنية، لا عدّاد محاولات
استطلع مقابل مهلة زمنية فعلية كما سبق. عدد المحاولات يزداد بصمت كلما تباطأ المرسل.
لا تعتمد أبداً على وقت التسليم
البريد ليس متزامنًا. تأكّد من أن الرسالة تصل، لا أنها تصل خلال ثانية محددة.
استخدم نطاقك الخاص لأي أمر حقيقي
صندوق البريد العام يمكن لأي شخص يخمّن العنوان قراءته. هذا مقبول لتسجيل مؤقت لمرة واحدة، وغير مقبول لبيئة تجريبية تحتوي بيانات عملاء. سجل MX واحد يحل المشكلة.

لوكلاء الذكاء الاصطناعي: MCP

لا يستطيع الوكيل قراءة هذه الصفحة، وتحديد النقطة الطرفية التي يريدها، وكتابة طلب. بل يسأل خادمًا عن الأدوات الموجودة ويستدعيها. يشغّل grabmail خادم بروتوكول سياق النموذج (Model Context Protocol) لهذا الغرض بالضبط، على https://grabmail.io/mcp — بلا مفتاح، بلا حساب.

وجّه أي عميل MCP إلى النقطة الطرفية. يقرأ Claude Desktop وCursor وContinue وOpenAI Agents SDK جميعًا هذا الشكل.

ست أدوات: create_inbox وlist_domains وlist_messages وread_message وdelete_message وwait_for_message.

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

wait_for_message هي التي تهم. السبب الذي يجعل الوكيل يريد صندوق بريد مؤقت هو غالبًا رمز تأكيد يقف بينه وبين الخطوة التالية. فبدلًا من الاستطلاع في حلقة تستهلك رموزًا (tokens)، يطلب عنوانًا، يرسل النموذج، وينتظر حتى تصل الرسالة:

ينتظر حتى 25 ثانية ويعيد الرسالة كاملة — المُرسِل، الموضوع، المتن — أو يقول إنه انتهت مهلته حتى يستطيع الوكيل ببساطة الاستدعاء مرة أخرى.

يمكنه أيضًا انتظار رسالة معينة: مرّر subject_contains أو from_contains ويُتجاهَل أي شيء آخر يصل.

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

توجد أيضًا مواصفة OpenAPI 3.1 (YAML) لمولدات الأكواد، وllms.txt لكل ما يفضّل قراءة نص عادي.

التالي

مرجع API

كل معلمة، كل رمز حالة، وشكل الخطأ.

افتح المرجع ←

الحدود

ما هو مسقوف، وما ليس كذلك، وما يحدث عند بلوغ السقف.

افتح الحدود ←

نطاقك الخاص

اجعل كل صندوق بريد على نطاقك خاصًا بك.

اطّلع على الإعداد ←