API بريد مؤقت · MCP

API بريد مؤقت وخادم MCP للاختبارات ولوكلاء الذكاء الاصطناعي

أنشئ صندوقًا مؤقتًا، وانتظر الرسالة التالية، واقرأ ما فيها من رموز وروابط ومرفقات عبر REST أو MCP.

TempGeneratorجارٍ التجهيز…

جرّبه الآن

لا حاجة إلى حساب. تحصل على صندوق خاص واحد لمدة تصل إلى 10 دقائق، ويمكنك حذفه في أي وقت. يمكن إنشاء صندوق تجريبي جديد مرة كل 10 دقائق لكل شبكة.

التجربة
دون تسجيل · 1 صندوق · 10 دقائق · علامة التبويب هذه فقط
رمز مميز للمطوّر
حساب متحقق منه · 5 صناديق في آن واحد · حتى 60 دقيقة · REST وMCP
إدارة مفاتيح API

أكّد بريدك الإلكتروني لإنشاء مفاتيح API محددة الصلاحيات وقابلة للإلغاء.

  1. إنشاء صندوق
  2. انتظار رسالة
  3. قراءة الرسالة

صندوق تجريبي خاص

يبقى مفتاح التجربة في ذاكرة علامة التبويب هذه. تفقد الوصول عند إعادة التحميل، لكن صلاحية الصندوق تنتهي تلقائيًا على أي حال.

    تُعرض الرسائل كنص عادي. تُكتشف الرموز والروابط تلقائيًا لكنها لا تُفتح أبدًا. تُنزَّل المرفقات عبر API الخاص.

    بدء سريع باستخدام curl

    أنشئ صندوقًا، وانتظر الرسالة التالية، واقرأها، ثم احذف الصندوق. احفظ مفتاح API في TEMPGENERATOR_TOKEN ولا تضعه أبدًا في عنوان URL.

    يتطلب curl وjq. ينتظر السكربت حتى ثلاث مرات، 20 ثانية في كل مرة، ويعرض موضوع كل رسالة ورموزها وروابطها ونصها، ثم يحذف الصندوق.

    bash
    export TEMPGENERATOR_URL='https://www.tempgenerator.com'
    API="$TEMPGENERATOR_URL/developer-api/v1"
    AUTH="Authorization: Bearer $TEMPGENERATOR_TOKEN"
    INBOX=$(curl --fail-with-body -sS -X POST "$API/inboxes" -H "$AUTH" -H 'Accept: application/json')
    ID=$(printf '%s' "$INBOX" | jq -r .id)
    echo "Send a test email to $(printf '%s' "$INBOX" | jq -r .address)"
    for ATTEMPT in 1 2 3; do
      RESULT=$(curl --fail-with-body -sS "$API/inboxes/$ID/wait?after=0&timeout=20" -H "$AUTH" -H 'Accept: application/json')
      [ "$(printf '%s' "$RESULT" | jq -r .status)" = message ] && break
    done
    for MESSAGE in $(printf '%s' "$RESULT" | jq -r '.messages[].id'); do
      curl --fail-with-body -sS "$API/inboxes/$ID/messages/$MESSAGE" -H "$AUTH" -H 'Accept: application/json' \
        | jq '{subject, codes, links, text}'
    done
    curl --fail-with-body -sS -X DELETE "$API/inboxes/$ID" -H "$AUTH"

    نظرة سريعة على API

    عنوان URL الأساسي: https://www.tempgenerator.com/developer-api/v1. أرسل Authorization: Bearer <key> مع كل طلب. الاستجابات بتنسيق JSON، والأخطاء بالشكل {"error": {"code", "message", "retry_after"}}، وترسل أخطاء الحصة أيضًا ترويسة Retry-After.

    • POST /inboxes إنشاء صندوق والحصول على عنوانه وموعد انتهاء صلاحيته
    • GET /inboxes/{id}/wait?after=0&timeout=20 انتظار الرسالة التالية بعد مؤشر لمدة أقصاها 20 ثانية
    • GET /inboxes/{id}/messages?after=0 عرض ما يصل إلى 50 رسالة بعد مؤشر، من الأقدم إلى الأحدث
    • GET /inboxes/{id}/messages/{message_id} قراءة رسالة واحدة: النص والرموز والروابط وقائمة المرفقات
    • GET /inboxes/{id}/messages/{message_id}/attachments/{index} تنزيل مرفق واحد حسب فهرسه
    • DELETE /inboxes/{id} حذف الصندوق ورسائله فورًا

    تقبل نقطتا العرض والانتظار عاملي التصفية الاختياريين from وsubject_contains، وهما يطابقان المرسل والموضوع بشرط «يحتوي على» دون تمييز بين الأحرف الكبيرة والصغيرة.

    مثال على استجابة القراءة

    json
    {
        "id": 42,
        "from": "no-reply@app.example",
        "subject": "Your verification code",
        "received_at": "2026-10-03T09:41:07+00:00",
        "text": "Your verification code is 482913.\nOr confirm: https://app.example/verify?token=8f3c",
        "text_truncated": false,
        "codes": [
            "482913"
        ],
        "links": [
            "https://app.example/verify?token=8f3c"
        ],
        "expires_at": "2026-10-03T10:40:12+00:00",
        "attachments": [
            {
                "index": 0,
                "filename": "receipt.pdf",
                "size": 48213
            }
        ],
        "untrusted_content": true
    }

    الرموز المميزة للمطوّرين

    أنشئ مفاتيح API من صفحة «وصول المطوّر» بعد تأكيد بريدك الإلكتروني. يستطيع مفتاح القراءة والكتابة إنشاء الصناديق وقراءتها وحذفها، ويستطيع مفتاح القراءة فقط العرض والانتظار والقراءة والتنزيل. تنتهي صلاحية المفاتيح بعد 90 يومًا، ويمكن أن يملك الحساب حتى 10 مفاتيح نشطة، ويسري إلغاء المفتاح فورًا.

    يُعرض كل مفتاح مرة واحدة ولا يُخزَّن إلا بصيغة تجزئة SHA-256. لا يحذف إلغاء المفتاح صناديقه: تحتفظ مفاتيح الحساب الصالحة الأخرى بالوصول إليها حتى تنتهي صلاحيتها أو تُحذف.

    إدارة مفاتيح API

    انتظار الرسالة التالية دون sleep()

    يُبقي GET …/wait الطلب مفتوحًا ويعيد الاستجابة فور وصول رسالة، أو بعد انتهاء المهلة (20 ثانية كحد أقصى) مع status timeout. مرّر next_cursor من الاستجابة السابقة كقيمة لـ after حتى لا تقرأ الرسالة نفسها مرتين.

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

    اختبار البريد الإلكتروني في Playwright وCypress وpytest وCI

    خصّص لكل اختبار صندوقًا مستقلًا، واجعل تطبيقك يرسل رسالة التسجيل أو إعادة تعيين كلمة المرور، ثم انتظرها وتحقّق من الرمز أو الرابط. احذف الصندوق في مرحلة التنظيف (teardown).

    خزّن المفتاح كسرّ في CI، مثل TEMPGENERATOR_TOKEN في GitHub Actions. يستطيع Cypress إجراء استدعاءات HTTP نفسها عبر cy.request، وتعمل وصفة Python أدناه مع pytest أو أي مشغّل اختبارات آخر.

    Playwright (TypeScript)

    TypeScript
    import { test, expect } from '@playwright/test';
    
    const api = `${process.env.TEMPGENERATOR_URL}/developer-api/v1`;
    const headers = { Authorization: `Bearer ${process.env.TEMPGENERATOR_TOKEN}`, Accept: 'application/json' };
    
    async function call(path: string, method = 'GET') {
      const response = await fetch(api + path, { method, headers });
      if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);
      return response.status === 204 ? null : response.json();
    }
    
    async function waitForCode(inboxId: string, after = 0): Promise<string> {
      for (let attempt = 0; attempt < 3; attempt++) {
        const result = await call(`/inboxes/${inboxId}/wait?after=${after}&timeout=20`);
        for (const summary of result.messages) {
          const message = await call(`/inboxes/${inboxId}/messages/${summary.id}`);
          if (message.codes.length) return message.codes[0];
        }
        after = result.next_cursor;
      }
      throw new Error('No verification code arrived');
    }
    
    test('signup sends a verification code', async ({ page }) => {
      const inbox = await call('/inboxes', 'POST');
      try {
        await page.goto('/signup');
        await page.getByLabel('Email').fill(inbox.address);
        await page.getByRole('button', { name: 'Create account' }).click();
        await page.getByLabel('Verification code').fill(await waitForCode(inbox.id));
        await expect(page.getByText('Welcome')).toBeVisible();
      } finally {
        await call(`/inboxes/${inbox.id}`, 'DELETE');
      }
    });

    GitHub Actions

    YAML
    - name: End-to-end tests
      run: npx playwright test
      env:
        TEMPGENERATOR_URL: https://www.tempgenerator.com
        TEMPGENERATOR_TOKEN: ${{ secrets.TEMPGENERATOR_TOKEN }}

    فحص التسجيل باستخدام Python

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

    Python
    import json, os
    from urllib.request import Request, urlopen
    
    base = os.environ["TEMPGENERATOR_URL"].rstrip("/") + "/developer-api/v1"
    headers = {"Authorization": "Bearer " + os.environ["TEMPGENERATOR_TOKEN"],
               "Accept": "application/json"}
    
    def request(path, method="GET"):
        with urlopen(Request(base + path, headers=headers, method=method), timeout=30) as response:
            return json.load(response) if response.status != 204 else None
    
    inbox = request("/inboxes", "POST")
    print(json.dumps(inbox), flush=True)
    try:
        input()
        result = request("/inboxes/" + inbox["id"] + "/wait?after=0&timeout=15")
        print(json.dumps(result))
        for message in result["messages"]:
            detail = request("/inboxes/" + inbox["id"] + "/messages/" + str(message["id"]))
            print(json.dumps(detail))
    finally:
        request("/inboxes/" + inbox["id"], "DELETE")

    خادم MCP لوكلاء الذكاء الاصطناعي

    نقطة النهاية https://www.tempgenerator.com/mcp، والمصادقة عبر Authorization: Bearer <key>. نقل Streamable HTTP بالبروتوكول 2026-07-28، ويُخدَم العملاء الأقدم عبر المصافحة 2025-11-25 أو 2025-06-18.

    ربط العميل

    Claude Code

    bash
    claude mcp add --transport http tempgenerator-mail https://www.tempgenerator.com/mcp \
      --header "Authorization: Bearer $TEMPGENERATOR_TOKEN"

    Cursor: .cursor/mcp.json

    JSON
    {
      "mcpServers": {
        "tempgenerator-mail": {
          "url": "https://www.tempgenerator.com/mcp",
          "headers": { "Authorization": "Bearer ${env:TEMPGENERATOR_TOKEN}" }
        }
      }
    }

    VS Code: .vscode/mcp.json

    JSON
    {
      "inputs": [
        { "type": "promptString", "id": "tempgenerator-token", "description": "TempGenerator API key", "password": true }
      ],
      "servers": {
        "tempgenerator-mail": {
          "type": "http",
          "url": "https://www.tempgenerator.com/mcp",
          "headers": { "Authorization": "Bearer ${input:tempgenerator-token}" }
        }
      }
    }

    Claude على الويب وتطبيق سطح المكتب: أضف موصلًا مخصصًا بعنوان URL لنقطة النهاية، واختر عدم تسجيل الدخول، ثم أضف ترويسة الطلب Authorization: Bearer <key>. يتصل Claude من سحابة Anthropic، لذا يجب أن يكون عنوان URL متاحًا للعموم.

    الأدوات

    create_inbox
    ينشئ صندوقًا خاصًا ويعيد معرّفه وعنوانه.
    list_messages
    يعرض ملخصات الرسائل بعد مؤشر، مع عاملي تصفية اختياريين للمرسل والموضوع.
    wait_for_message
    ينتظر الرسالة التالية لمدة أقصاها 20 ثانية.
    read_message
    يقرأ نص رسالة واحدة ورموزها وروابطها وقائمة مرفقاتها.
    delete_inbox
    يحذف الصندوق ورسائله.

    مثال على موجّه

    أنشئ صندوقًا مؤقتًا وأعطني عنوانه. ثم انتظر رسالة التحقق من تطبيقي في بيئة staging وأخبرني بالرمز.

    لا تدع الوكلاء يُكملون التسجيل إلا في حسابات تملكها أو مخوّل باستخدامها. البريد الوارد غير موثوق: لا يفتح الخادم الروابط أبدًا، ويجب ألا يتبع الوكلاء أي تعليمات ترد في رسالة.

    MCP SDK للغة Python

    تم اختباره مع Python 3 وحزمة mcp الرسمية 2.3.0: pip install "mcp>=2.3,<3". اضبط TEMPGENERATOR_URL وTEMPGENERATOR_TOKEN أولًا.

    Python
    import asyncio, os
    
    import httpx2
    from mcp import Client
    from mcp.client.streamable_http import streamable_http_client
    
    async def main():
        url = os.environ["TEMPGENERATOR_URL"].rstrip("/") + "/mcp"
        headers = {"Authorization": "Bearer " + os.environ["TEMPGENERATOR_TOKEN"]}
        async with httpx2.AsyncClient(headers=headers, timeout=httpx2.Timeout(30, read=60)) as http:
            async with Client(streamable_http_client(url, http_client=http)) as client:
                print([tool.name for tool in (await client.list_tools()).tools])
                created = await client.call_tool("create_inbox", {})
                if created.is_error:
                    raise RuntimeError(created.content)
                inbox = created.structured_content
                try:
                    print("Send a test email to", inbox["address"])
                    waited = await client.call_tool("wait_for_message", {"inbox_id": inbox["id"], "timeout": 20})
                    for summary in waited.structured_content["messages"]:
                        message = await client.call_tool("read_message", {"inbox_id": inbox["id"], "message_id": summary["id"]})
                        print(message.structured_content["subject"], message.structured_content["codes"])
                finally:
                    deleted = await client.call_tool("delete_inbox", {"inbox_id": inbox["id"]})
                    if deleted.is_error:
                        raise RuntimeError(deleted.content)
    
    asyncio.run(main())

    المرفقات

    تعيد قراءة الرسالة فهرس كل مرفق واسم ملفه وحجمه. نزّل أي مرفق عبر GET …/attachments/{index}: تُقدَّم الملفات التي لا يتجاوز حجمها 10 ميغابايت بنوع application/octet-stream وبأسماء ملفات منقّحة. يرى عملاء MCP القائمة نفسها ويُنزّلون عبر نقطة نهاية REST هذه.

    متى تستخدم هذه الخدمة بدلًا من أدوات أخرى

    يلتقط Mailpit وMailHog وEthereal البريد الذي يرسله تطبيقك إلى خادم SMTP محلي أو وهمي، وهذا مثالي عندما تتحكم في إعدادات SMTP. أما هذه الصناديق فعناوين حقيقية على نطاق عام، لذا يمكن لأي مرسل الوصول إليها: خدمة خارجية، أو خادم staging يستخدم مزوّد البريد الحقيقي لديك، أو مسار قريب من بيئة الإنتاج.

    واجهات API العامة للبريد المؤقت، مثل mail.tm أو Guerrilla Mail، مصممة للعناوين المؤقتة الشخصية. أما هذه الواجهة فمصممة للأتمتة: مفاتيح محددة الصلاحيات والمدة، وصندوق لكل اختبار، وانتظار محدود عبر long polling، واكتشاف الرموز والروابط، وخادم MCP.

    غير مشمول: إرسال البريد، والرسائل النصية SMS، ومعاينات HTML أو البريد العشوائي، والنطاقات المخصصة، وتسجيل الدخول عبر OAuth لعملاء MCP.

    الاحتفاظ والحدود والأمان

    الحدالتجربةرمز مميز للمطوّر
    مدة بقاء الصندوق10 دقائقحتى 60 دقيقة
    الصناديق النشطة15 لكل حساب
    الصناديق الجديدةصندوق واحد كل 10 دقائق لكل شبكة20 في الساعة
    طلبات API120 في الدقيقة120 في الدقيقة
    الانتظار (long polling)حتى 20 ثانية، انتظار واحد لكل صندوقحتى 20 ثانية، انتظار واحد لكل صندوق، وحتى 2 في آن واحد
    الرسائل لكل صندوقحتى 10حتى 10
    نص الرسالة المُعادأول 128 كيلوبايتأول 128 كيلوبايت
    تنزيل المرفقاتحتى 10 ميغابايت لكل مرفقحتى 10 ميغابايت لكل مرفق
    الوصولعلامة تبويب المتصفح هذه فقطREST API وMCP بمفاتيحك

    يمكن لنطاق الاستقبال أن يحدد مدة بقاء أقصر أو حدًا أقل لعدد الرسائل.

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

    الأسئلة الشائعة

    ما المقصود بـ API بريد مؤقت؟

    واجهة API عبر HTTP تنشئ صناديق بريد مؤقتة عند الطلب وتتيح لشيفرتك قراءة ما يصل إليها. هنا يكون كل صندوق خاصًا بمفتاحك، وتنتهي صلاحيته تلقائيًا، ويمكن قراءته عبر REST أو MCP.

    هل أحتاج إلى حساب؟

    ليس للتجربة: تنشئ التجربة صندوقًا خاصًا واحدًا لمدة 10 دقائق في متصفحك. للحصول على مفاتيح API وMCP وصناديق تدوم مدة أطول، أنشئ حسابًا وأكّد بريدك الإلكتروني.

    كم تدوم الصناديق؟

    تدوم الصناديق التجريبية 10 دقائق. وتدوم الصناديق المنشأة برمز مميز للمطوّر حتى 60 دقيقة، أو أقل إذا حدد نطاق الاستقبال مدة أقصر. يمكنك حذف الصندوق في أي وقت.

    كيف أنتظر رسالة بريد في اختبار؟

    استدعِ نقطة النهاية wait، أو أداة wait_for_message، مع أحدث مؤشر. تعود الاستجابة فور وصول رسالة، أو بعد 20 ثانية على الأكثر مع status timeout؛ ثم انتظر مجددًا بالمؤشر نفسه. تجنّب فترات الانتظار الثابتة.

    كيف أحصل على رمز OTP أو رابط التحقق؟

    اقرأ الرسالة. تحتوي الاستجابة على نصها العادي، إضافة إلى الحقل codes (رموز يُرجَّح أنها لمرة واحدة عُثر عليها قرب كلمات مثل «رمز» أو OTP أو «تحقق») والحقل links (روابط http وhttps من النص ومن HTML). هذه مجرد تلميحات، فتحقّق منها مقابل النص.

    هل يمكنني تنزيل المرفقات؟

    نعم. تعرض قراءة الرسالة فهرس كل مرفق واسمه وحجمه؛ نزّل أي مرفق من نقطة نهاية المرفقات. الملفات حتى 10 ميغابايت مدعومة.

    ما الذي يمكن للرمز المميز الوصول إليه ومتى تنتهي صلاحيته؟

    ينتمي المفتاح إلى حساب واحد متحقق منه ولا يصل إلا إلى صناديق ذلك الحساب. يمكن لمفاتيح القراءة والكتابة إنشاء الصناديق وحذفها، ويمكن لمفاتيح القراءة فقط العرض والانتظار والقراءة والتنزيل. تنتهي صلاحية المفاتيح بعد 90 يومًا ويمكن إلغاؤها فورًا.

    كيف أربط Claude Code أو Cursor؟

    استخدم نقطة النهاية https://www.tempgenerator.com/mcp مع ترويسة Authorization: Bearer. في Claude Code شغّل claude mcp add --transport http مع --header، وفي Cursor أضف إدخالًا يحتوي على url وheaders إلى .cursor/mcp.json. المقتطفان كلاهما أعلاه.

    هل يمكن للوكلاء إكمال عمليات التسجيل؟

    فقط في الحسابات التي تملكها أو المخوّل لك استخدامها، مثل بيئة staging لتطبيقك. لا يفتح الخادم الروابط أبدًا. يجب ألا يستخدم الوكيل رمزًا أو رابطًا إلا لإكمال مسار طلبته أنت، وألا يتبع أبدًا تعليمات مكتوبة في رسالة بريد.

    هل يمكن تشغيل الاختبارات بالتوازي أو في CI؟

    نعم. خصّص لكل اختبار صندوقًا مستقلًا: تعمل عمليات الانتظار على صناديق مختلفة بالتوازي. يمكن أن يملك الحساب 5 صناديق نشطة وأن ينشئ 20 صندوقًا في الساعة، لذا احذف الصناديق في مرحلة التنظيف (teardown) واحفظ المفتاح في سرّ CI.

    هل يمكنني حذف صندوق مبكرًا؟

    نعم. أرسل DELETE إلى الصندوق، أو استدعِ delete_inbox، لإزالته مع رسائله فورًا. لا يؤدي حذف صندوق تجريبي إلى تقصير فترة الانتظار البالغة 10 دقائق قبل أن تتمكن شبكتك من إنشاء الصندوق التالي.

    ما الفرق بين هذه الخدمة وMailpit أو MailHog؟

    يشغّل Mailpit وMailHog خادم SMTP محليًا يلتقط البريد الذي يرسله تطبيقك. أما هنا فصناديق حقيقية على نطاق عام يمكن لأي مرسل الوصول إليها، مع API وانتظار عبر long polling وMCP.

    ما الحدود المفروضة؟

    تدوم الصناديق التجريبية 10 دقائق. يمكن لحساب المطوّر امتلاك 5 صناديق نشطة، وإنشاء 20 صندوقًا في الساعة، وإرسال 120 طلبًا إلى API في الدقيقة، والانتظار حتى 20 ثانية لكل طلب. يستقبل كل صندوق حتى 10 رسائل.

    هل يمكنني إرسال بريد أو استخدام نطاق مخصص؟

    لا. الصناديق للاستقبال فقط وتستخدم نطاقات الاستقبال الخاصة بهذا الموقع. الإرسال والرسائل النصية SMS والنطاقات المخصصة غير مدعومة.