جرّبه الآن
لا حاجة إلى حساب. تحصل على صندوق خاص واحد لمدة تصل إلى 10 دقائق، ويمكنك حذفه في أي وقت. يمكن إنشاء صندوق تجريبي جديد مرة كل 10 دقائق لكل شبكة.
- التجربة
- دون تسجيل · 1 صندوق · 10 دقائق · علامة التبويب هذه فقط
- رمز مميز للمطوّر
- حساب متحقق منه · 5 صناديق في آن واحد · حتى 60 دقيقة · REST وMCP
أكّد بريدك الإلكتروني لإنشاء مفاتيح API محددة الصلاحيات وقابلة للإلغاء.
- إنشاء صندوق
- انتظار رسالة
- قراءة الرسالة
صندوق تجريبي خاص
يبقى مفتاح التجربة في ذاكرة علامة التبويب هذه. تفقد الوصول عند إعادة التحميل، لكن صلاحية الصندوق تنتهي تلقائيًا على أي حال.
تُعرض الرسائل كنص عادي. تُكتشف الرموز والروابط تلقائيًا لكنها لا تُفتح أبدًا. تُنزَّل المرفقات عبر API الخاص.
بدء سريع باستخدام curl
أنشئ صندوقًا، وانتظر الرسالة التالية، واقرأها، ثم احذف الصندوق. احفظ مفتاح API في TEMPGENERATOR_TOKEN ولا تضعه أبدًا في عنوان URL.
يتطلب curl وjq. ينتظر السكربت حتى ثلاث مرات، 20 ثانية في كل مرة، ويعرض موضوع كل رسالة ورموزها وروابطها ونصها، ثم يحذف الصندوق.
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 /انتظار الرسالة التالية بعد مؤشر لمدة أقصاها 20 ثانيةinboxes/ {id}/ wait ?after=0&timeout=20 -
GET /عرض ما يصل إلى 50 رسالة بعد مؤشر، من الأقدم إلى الأحدثinboxes/ {id}/ messages ?after=0 -
GET /قراءة رسالة واحدة: النص والرموز والروابط وقائمة المرفقاتinboxes/ {id}/ messages/ {message_id} -
GET /تنزيل مرفق واحد حسب فهرسهinboxes/ {id}/ messages/ {message_id}/ attachments/ {index} -
DELETE /حذف الصندوق ورسائله فورًاinboxes/ {id}
تقبل نقطتا العرض والانتظار عاملي التصفية الاختياريين from وsubject_contains، وهما يطابقان المرسل والموضوع بشرط «يحتوي على» دون تمييز بين الأحرف الكبيرة والصغيرة.
مثال على استجابة القراءة
{
"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)
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
- name: End-to-end tests
run: npx playwright test
env:
TEMPGENERATOR_URL: https://www.tempgenerator.com
TEMPGENERATOR_TOKEN: ${{ secrets.TEMPGENERATOR_TOKEN }}
فحص التسجيل باستخدام Python
شغّل السكربت بعد ضبط متغيرات البيئة. سيعرض صندوقًا جديدًا؛ أرسل رسالة تسجيل من تطبيق الاختبار الخاص بك إلى ذلك العنوان، ثم اضغط Enter. ينتظر حتى 15 ثانية، ويعرض كل رسالة مع رموزها وروابطها، ويحذف الصندوق حتى إن فشلت القراءة.
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
claude mcp add --transport http tempgenerator-mail https://www.tempgenerator.com/mcp \
--header "Authorization: Bearer $TEMPGENERATOR_TOKEN"
Cursor: .cursor/mcp.json
{
"mcpServers": {
"tempgenerator-mail": {
"url": "https://www.tempgenerator.com/mcp",
"headers": { "Authorization": "Bearer ${env:TEMPGENERATOR_TOKEN}" }
}
}
}
VS Code: .vscode/mcp.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 أولًا.
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 دقيقة |
| الصناديق النشطة | 1 | 5 لكل حساب |
| الصناديق الجديدة | صندوق واحد كل 10 دقائق لكل شبكة | 20 في الساعة |
| طلبات API | 120 في الدقيقة | 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 والنطاقات المخصصة غير مدعومة.