صناديق الوارد المؤقتة
عنوان يعمل لمن ليس لديه عنوان: بلا حساب، وبلا مفتاح، ويختفي في اليوم نفسه.
ما هو صندوق الوارد المؤقت
يطلب المُنادي عنوانًا على نطاق يملكه هذا التثبيت، ويراقبه بضع دقائق، ويقرأ ما يصل، ثم يهجره. وهو موجود لأجل رمز التأكيد، ولسؤال «ما الذي يرسله هذا النموذج فعلًا»، وللتسجيل الذي لا تريد ربطه بالعنوان الذي ستظل تستخدمه بعد خمس سنوات.
- يستقبل ولا شيء غير ذلك. لا إرسال: فصندوق الوارد لا هوية له يرسل باسمها، ولن تضع أيٌّ من هذه النداءات التسعة رسالة على السلك.
- مدة الحجز 60 دقيقة افتراضيًا ويمكن دفعها إلى 24 ساعة، ساعةً في كل مرة.
- يحمل 50 رسالة، تُحسب عند وصولها. والبريد الواصل إلى صندوق ممتلئ يُسقَط لا يُصفّ، وحذف رسالة لا يشتري مكانًا لأخرى.
- في نهاية مدة الحجز يُحذَف البريد، لا يُخفى ولا يُؤرشَف. ويبقى الصف بعده أسبوعًا حتى لا يُعاد إصدار العنوان بينما مرسِل بطيء ما زال يعيد المحاولة إليه.
- لا شيء من ذلك يمسّ صندوق بريد. فالرسالة المؤقتة تعيش في جدولها الخاص، ولا يستطيع أي استعلام على هذا المسار بلوغ صندوق حقيقي.
هذه هي النداءات نفسها التي تصنعها الأداة المجانية على هذا الموقع، فكل ما تستطيعه الصفحة تستطيعه شيفرتك. والـ API هنا للحالة التي لا تصلح فيها الصفحة: مجموعة اختبارات تريد عنوانًا جديدًا لكل تشغيل.
العنوان ليس بيانات الاعتماد
العنوان المؤقت يُكتب في نموذج تسجيل لحظة إصداره. ومن هناك يسافر في ترويسة To:، وعبر سجلات المرسِل، وإلى أي نظام CRM يجلس في الطرف الآخر. ولو كانت معرفة العنوان كافية لقراءة البريد، لسرّبت الأداة كل صندوق أصدرته، بالتصميم، وإلى الطرف نفسه الذي كان المُنادي يبقيه على مسافة ذراع.
ولذلك فإن إنشاء صندوق يُعيد قيمة ثانية: token، وهو 32 بايتًا عشوائيًا بصيغة oe_inbox_ زائد 43 محرف base64url. يظهر في تلك الاستجابة وحدها ولا يظهر في غيرها. ولا يحتفظ الصف إلا بتجزئة مفتاحية له، فلا شيء يستعيده، لا طلب دعم ولا نسخة من قاعدة البيانات. أضع الرمز وقد أضعت الصندوق، وهي النتيجة الصحيحة لبيانات اعتماد تقرأ بريد شخص ما.
# 1. Mint one. This is the only response that carries a token.curl -s -X POST "$OE/temp-mail/inboxes" -H "Content-Type: application/json" -d '{}' # 2. Keep it, and read with it.export INBOX="Authorization: Bearer oe_inbox_kQ8v…"curl -s "$OE/temp-mail/inboxes/tinb_9c2f…/messages" -H "$INBOX"أرسل مفتاح API من نوع oe_live_ أو oe_test_ إلى أحد هذه المسارات ويُرفَض بالرمز invalid_credential_type لا بـ 401 مجرد. فنوعان من بيانات الاعتماد يتشاركان مضيفًا واحدًا وترويسة واحدة هنا، و«غير مصرَّح» كان سيتركك تخمّن أيهما كان خطأ.
مدة الحجز وتمديدها
ساعة، لا العشر دقائق التي سُمّي بها هذا النوع من الأدوات. فالعشر تكفي لرمز تأكيد ولا تكفي للنصف الآخر مما تُستخدم له: تجربة تراسلك مرة أخرى صباح الغد، أو نموذج مُلئ مرتين لأن المحاولة الأولى انتهت مهلتها. وttlMinutes عند الإنشاء يطلب شيئًا آخر، من 1 إلى 1440؛ والرقم خارج ذلك يُرفَض بـ 422 بدل أن يُعدَّل بصمت، لأن انتهاء صلاحية لم تطلبه هو انتهاء خطّطت حوله سلفًا.
POST /temp-mail/inboxes/{id}/extend يضيف ساعة إلى وقت الانتهاء، لا إلى الآن، فالتمديد المبكر لا يهدر الوقت المتبقي لك. ويعمل 23 مرة، واليوم المحسوب من لحظة إنشاء الصندوق هو الأصعب من السقفين: فمدة حجز تمتد إليه أصلًا لا يبقى لها ما تشتريه، مهما قلّ ما أُنفق من تمديدات. وextensionsLeft في كل استجابة صندوق يحسب الاثنين، فيستطيع العميل تعطيل الزر؛ وعند الصفر يجيب النداء 409 extension_limit.
الصندوق المنتهي يتوقف عن الاستيثاق في اللحظة التي ينتهي فيها: فرمزه يجيب 404 دون انتظار عملية الكنس. والكنس هو ما يحذف البريد، ويعمل على مهمة cron الساعية؛ وDELETE /temp-mail/inboxes/{id} هو الحذف نفسه عند الطلب.
السقوف
كل هذه صفوف محسوبة لا محدِّد معدل. فلا يوجد محدِّد في قاعدة الشيفرة هذه نلجأ إليه، وقول ذلك أنفع من الإيحاء بدفاع غير موجود. وهي موضوعة حيث يقع الضرر: الصكّ، والتخزين.
| السقف | القيمة | ما الذي يحدث عنده |
|---|---|---|
| مدة الحجز | 60 دقيقة، قابلة للتمديد إلى 24 ساعة | 409 conflict_error / extension_limit |
| الرسائل لكل صندوق وارد | 50 | البريد الإضافي يُسقَط عند الباب. لا يُكتب ارتداد، ولا يُصفّ شيء، وحذف رسالة لا يعيد المكان. |
| صناديق الوارد المصكوكة | 6 في الساعة، 30 في اليوم، لكل مُنادٍ | 429 rate_limit_error / too_many_inboxes |
| النص المخزَّن | 2 MB | truncated: true على الرسالة؛ وبقيتها ذهبت. |
| بايتات المرفقات | 8 MB لكل واحد | content تكون null وتُحفظ البيانات الوصفية، وهذا ليس كملف فارغ. |
سقف الصكّ يُحسَب في مقابل تجزئة مفتاحية لعنوان IP الخاص بالعميل، والصندوق المُدمَّر يظل محسوبًا، فرمي واحد ليس طريقة لشراء آخر. وخلف وسيط شخص آخر يمكن انتحال الترويسة المُمرَّرة، وهو ضعف معروف في السقف لا ثغرة في بيانات الاعتماد: فلا شيء هنا يفوّض بناءً على تلك القيمة.
ما هو غير موجود هنا
لم يُطلق بعدأن تكتشف بالمحاولة أسوأ من أن يُقال لك:
- لا إرسال بأي شكل. فصندوق الوارد المؤقت لا اتصال له يرسل باسمه، وإضافة واحد كانت ستحوّل نقطة نهاية مجهولة وغير مستوثَقة إلى مُرحِّل مفتوح.
- لا إعادة تسمية. فتغيير عنوانك يعني إنشاء صندوق ثانٍ: إعادة التسمية في المكان كانت ستحرر الجزء المحلي القديم في اللحظة التي يُنقر فيها، ورسالة تأكيد في الطريق كانت ستُسلَّم عندئذٍ إلى من أُصدر له بعدك.
- لا قواعد، ولا مرشِّحات، ولا إعادة توجيه، ولا ويب هوك، ولا ذكاء اصطناعي.
spamراية على الرسالة ولم يتصرف أحد بناءً عليها. لم يُحفَظ شيء جانبًا، ولا شيء هنا يُلخَّص أو يُحوَّل إلى متجهات. - لا ارتدادات. فالبريد إلى نطاق في التجمع لا يسمّي صندوق وارد مؤقتًا حيًّا ولا عنوانًا أنشأه المشغِّل يُسقَط بصمت، عن قصد: فمولّد عناوين عام يجذب هجمات القاموس، وكتابة تقرير تسليم إلى أي مسار عودة يدّعيه الهجوم كانت ستجعل التثبيت مصدر ارتداد عكسي.
- لا نطاق مهيّأ يعني لا خدمة. فحين تكون
TEMP_MAIL_DOMAINSفارغة، يجيبGET /temp-mail/domainsبقائمة فارغة ويجيب إنشاء صندوق بـ 503temp_mail_unavailable. ولم يُلاحَظ التسليم الوارد إلى نطاق في التجمع من طرف إلى طرف على نطاق حيّ.
تهيئة نطاق، إن كنت تدير التثبيت
القائمة تهيئة: فما تسمّيه TEMP_MAIL_DOMAINS هو ما يُوزَّع. ولا شيء يؤتمت DNS، فأربع من هذه الخطوات الخمس هي إنسان عند مسجّل نطاقات.
- سجّل نطاقًا لذلك. استخدم نطاقًا ترضى بأن يوزّعه الغرباء. فكل عنوان عليه يتشارك سمعته، وهو أيضًا سبب أن المنتقي يوزّع صناديق الوارد الجديدة عبر التجمع عشوائيًا بدل ملء الأول.
- أضفه في التطبيق تحت الإعدادات ← النطاقات. فذلك يصكّ هوية الإرسال ويطبع سجلات DNS المطلوب نشرها.
- انشر سجلات MX وSPF وDKIM و
_openemail-challengeمن نوع TXT عند المسجّل. والتحقق يقرأ DNS الحي ويُعاد فحصه على cron؛ ولا يُعرض إلا نطاق موثَّق. - أضف النطاق الموثَّق إلى
TEMP_MAIL_DOMAINSعلى الخادم، مفصولًا بفواصل. وإلى أن يُدرَج يبقى نطاقًا عاديًا على مساحة العمل. - اترك catch-all مفعّلًا. فهو ما يجعل العنوان المؤقت موجودًا دون إنشائه، لأن البريد إلى أي جزء محلي يُقبَل ويُقرأ قبل بحث المستلِم العادي، فلا يُكتب صف عنوان قط لنطاق في التجمع؛ وترك catch-all مفعّلًا كان سيبدأ بحفظ بريد الاستعمال ثم الرمي في صندوق بريد حقيقي.
الأجزاء المحلية المحجوزة (postmaster وabuse وsecurity وبقية RFC 2142) لا يمكن أن تكون مؤقتة إطلاقًا وتسقط إلى صندوق البريد العادي بدلًا من ذلك. فالنطاق في التجمع الذي يبتلع تقارير إساءة استخدامه هو نطاق يفقد قدرته على التسليم في أي مكان. والعنوان الذي تنشئه أنت على نطاق في التجمع، مثل legal@ أو privacy@، يتصرف بالطريقة نفسها: فالبريد إليه يصل إلى صندوق بريدك، ولا يمكن إصداره لأحد كعنوان مؤقت.