واجهة inboxsink البرمجية
صناديق مؤقّتة تُدار بالشيفرة، لاختبار مسارات التسجيل دون الاعتماد على صندوق بريد حقيقي. خمسة مسارات، وقاعدة واحدة على https://inboxsink.com، بصيغة JSON.
المسار الذي يغيّر المعادلة هو wait: يحجب حتى تصل الرسالة. بدونه يلجأ اختبار الطرف إلى الطرف إلى التخمين عبر sleep، ويصبح هشّاً بمجرّد تأخّر طابور الإرسال.
ألف نداء شهرياً، بلا بطاقة. ما يكفي لوصله بمجموعة اختباراتك ومعرفة إن كان يصمد.
ثم حين تبدأ اختباراتك بالرفض: نطاقك الخاصّ لا يُنشَر في أيّ مكان، فلا يقع في أيّ قائمة حجب — 29 € شهرياً.
عميل JavaScript
حزمة بلا أيّ اعتماديات، لـ Node 18 فما فوق. الشيفرة على GitHub.
npm i inboxsink
import { InboxSink } from 'inboxsink'; const sink = new InboxSink(process.env.INBOXSINK_API_KEY); const inbox = await sink.createInbox(); const code = await sink.waitForOtp(inbox.id); // '204815'
يرمي waitForOtp خطأً بدل إعادة null حين لا يصل أيّ رمز: يجب أن يفشل الاختبار بصوت عالٍ، لا أن يملأ حقلاً فارغاً بصمت.
المصادقة
ترويسة Authorization مع كلّ نداء. تُنشأ المفاتيح من لوحة التحكّم وتبدأ بـ ibsk_.
curl -H "Authorization: Bearer ibsk_…" \
https://inboxsink.com/v1/domains
لا يُعرَض المفتاح بصيغته الصريحة إلا لحظة إنشائه. بعدها تبقى بادئته وحدها ظاهرة — ونحن لا نحفظ سوى بصمته.
إنشاء صندوق
كلّ المعاملات اختيارية: domain (افتراضياً نطاق عشوائي من المجموعة)، وprefix (افتراضياً عشوائي)، وttl_seconds (من 60 ثانية إلى 30 يوماً).
curl -X POST https://inboxsink.com/v1/inboxes \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ -d '{"ttl_seconds": 900}' → 201 { "id": "42", "address": "9f2c1a@mailhusk.com", "expires_at": "2026-09-01T15:12:00Z" }
الصندوق المُنشأ عبر الواجهة خاصّ: لا يقرؤه إلا المفتاح الذي أنشأه.
انتظار رسالة
يحجب حتى تصل رسالة، ثم يُجيب فوراً. timeout بالملّي ثانية (30 000 افتراضياً، و120 000 حدّاً أقصى)، وsince لاستقبال الرسائل اللاحقة لمعرّف بعينه فقط.
يُجيب بـ 204 بلا محتوى إذا انقضت المهلة دون رسالة — وهذا ليس خطأً، بل الجواب الطبيعي على «لم يصل شيء».
curl -H "Authorization: Bearer $KEY" \ "https://inboxsink.com/v1/inboxes/42/wait?timeout=45000" → 200 { "message": { "id": "913", "from": "no-reply@acme.com", "subject": "…", "otp": "204815", "link": "https://acme.com/confirm/9f3a" } }
يُستخرَج otp وlink نيابةً عنك. ولا يُبلَّغ عن رمز إلا إذا أعلنته الرسالة فعلاً («رمز»، «تحقّق»، «تسجيل دخول»…) — فلن يُخلَط مبلغ فاتورة أو سنة برمز أبداً.
سرد الرسائل
يقبل since وlimit (50 افتراضياً، و200 حدّاً أقصى). يُعيد ملخّصات بلا متن الرسائل.
قراءة رسالة
الرسالة كاملة: text وhtml وheaders وقائمة المرفقات.
حذف صندوق
يمحو الصندوق ورسائله فوراً. ويُجيب بـ 204.
الأخطاء
| 204 | بلا محتوى — في wait، انقضت المهلة دون رسالة |
| 400 | معامل غير صالح |
| 401 | المفتاح مفقود أو مجهول أو مُلغى |
| 403 | هذا الصندوق يخصّ مفتاحاً آخر |
| 404 | الصندوق أو الرسالة غير موجود، أو انتهت صلاحيته |
| 429 | نداءات كثيرة أكثر من اللازم |
الحدود ومدّة البقاء
صناديق المجموعة العامّة تعيش ساعة واحدة؛ أمّا المُنشأة عبر الواجهة فتتبع ttl_seconds الخاصّ بها، حتى ثلاثين يوماً. وبعد انقضاء المدّة يُحذف الصندوق ورسائله — ولا أرشيف يُسترجَع منه شيء لاحقاً.
تُرفَض الرسائل التي تتجاوز عشرة ميغابايت عند الاستقبال. وتُرفَض العناوين على نطاق مجهول أثناء جلسة SMTP نفسها، دون توليد رسالة ارتداد.
لا تستطيع هذه الصناديق إرسال البريد، وهذا مقصود: رسالة مُرسَلة من نطاق مؤقّت لن تصل إلى أيّ مكان.