جرّبه في البيئة المعزولة → كل نقطة نهاية مزودة بزر يشغّلها على الخدمة الفعلية. لا يتطلب أي شيء هنا مفتاحًا، لذا فإن أي طلب ترسله من هذه الصفحة هو طلب حقيقي: فهو يحجز عنوانًا حقيقيًا ويُحتسب.
التدفق
طلبان ورسالة بريد إلكتروني واحدة. الاستدعاء الثالث موجود فقط لأن التحليل يستغرق بضع ثوانٍ.
احجز عنوانًا
أرسل طلب POST إلى نقطة نهاية صندوق الوارد. ستحصل على عنوان يقبل رسالة واحدة فقط وتنتهي صلاحيته خلال ساعة، بالإضافة إلى المعرّف المختصر الذي يُستخدم مفتاحًا لكل ما عدا ذلك.
أرسل إليه الرسالة الفعلية
عبر SMTP، ومن المنصة التي سترسل الحملة. نصف الفحوصات يقرأ الترويسات التي تضيفها منصة الإرسال، لذا فإن رسالة مُنشأة يدويًا تقيس الشيء الخطأ.
استقصِ الحالة، ثم اقرأ التقرير
حجم نقطة نهاية الحالة بضع مئات من البايتات، وهي تخبرك بما إذا كان التقرير الكامل يستحق الجلب بعد. أما التقرير نفسه فيمتد إلى عدة آلاف من الأسطر.
# 1. reserve a single-use address curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en' { "address": "test-<slug>@t.email-spam-tester.com", "slug": "<slug>", "expires_at": "2026-01-01T12:00:00Z" }
# 2. send your message to that address, then poll curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status' { "slug": "<slug>", "analysis_status": "checks_ready", "ai_status": "running", "checks_done": 39, "checks_total": 39 }
# 3. read the report once analysis_status is checks_ready curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>' { "report_url": "https://email-spam-tester.com/t/<slug>", "score_ours": 86.4, "score_compat": 9.2, "subscores": {"auth": 100.0, "infra_spam": 78.1, "content": 92.0, "compliance": 75.0}, "complete": true, "checks": [ { "id": "auth.dmarc", "status": "warn", "title": "DMARC result", "summary": "DMARC passes, but the policy is p=none.", "weight_ours": -4.0, "evidence": {"policy": "none", "aligned": "dkim"}, "citations": {"standards": [{"title": "RFC 9989 §4.7", "quote": "..."}]} } ], "fixes": [ {"id": "dmarc-enforce", "gain_ours": 4.0, "gain_compat": 0.0, "fix": {"title": "Move DMARC to quarantine", "severity": "medium"}} ] }
المصادقة
لا توجد مصادقة. لا مفتاح لطلبه، ولا ترويسة لتعيينها، ولا حساب لإنشائه. المعرّف المختصر الذي تحصل عليه هو صلاحية الوصول: يمكن لمن يحمله قراءة ذلك التقرير، ولا يمكن لأي شخص آخر تخمينه.
نقاط النهاية
العنوان الأساسي https://email-spam-tester.com. كل شيء يستجيب بصيغة JSON.
POST/api/v1/inbox
يحجز عنوانًا للاستخدام مرة واحدة. كلا المعلمتين اختياريتان.
| lang | اللغة التي ستُكتب بها خطة الإصلاح ونتائج كل فحص، على هيئة رمز ISO. تُحدَّد الآن لأن الرسالة تصل عبر SMTP بعد دقائق ولا تحمل أي إشارة إلى هوية من ينتظرها. عند إدخال رمز غير معروف، يُستخدم الإنجليزية بدلًا منه. |
| utm_source, utm_medium, utm_campaign | تُمرَّر إلى تحليلاتنا. مفيدة إذا كنت تقيس تكاملك الخاص. |
GET/api/v1/tests/{slug}/status
قليلة التكلفة عند الاستطلاع. تُرجع حقلي الحالة ومدى تقدم الفحوصات، ولا شيء غير ذلك.
GET/api/v1/tests/{slug}
التقرير كاملًا. يستجيب بالحالة 202 ما دام العنوان محجوزًا ولم تصل أي رسالة بعد، وبالحالة 200 بعد وصولها.
GET/api/v1/tests/{slug}/message
الرسالة كما تم تسليمها تمامًا: كل ترويسة بترتيب النقل، وكلا المتنين، وقائمة المرفقات، والمصدر الخام. تُجلب بشكل منفصل لأن التقرير يُستطلع وقد يصل حجم هذه البيانات إلى ميغابايت واحد.
PUT/api/v1/tests/{slug}/locale
يغيّر لغة حجز لم يُستخدم بعد. لوكيل يعرف اللغة التي يقرأ بها مستخدمه بعد أن يكون قد طلب العنوان بالفعل. يُرفض الطلب بعد وصول الرسالة، لأن التحليل يكون قيد التشغيل حينها.
GET/api/health
فحص الحيوية. بلا مصادقة، وبلا آثار جانبية.
قراءة التقرير
الحقول التي تحمل الإجابة، بالترتيب الذي يُرجّح أنك تريده.
| score_ours | من 0 إلى 100. نموذجنا. تحمل المصادقة والبنية التحتية معظم الوزن، لأنهما تحددان التسليم قبل أن يقرأ عامل تصفية كلمة واحدة من النص. |
| score_compat | من 0 إلى 10. يعيد إنتاج الرقم بأسلوب SpamAssassin الذي يقارنه الأشخاص بالفعل، بحيث يكون التقرير قابلاً للمقارنة بما رآه شخص ما في مكان آخر. |
| subscores | المقياس نفسه من 0 إلى 100 لكل قسم: auth، وinfra_spam، وcontent، وcompliance. |
| checks[] | جميع الفحوصات البالغ عددها 41، ولكل منها حالة، ونتيجة في سطر واحد، والأدلة التي استند إليها القرار، ومقدار ما خصمته من الدرجتين. |
| checks[].citations | مصدر النتيجة: القسم من RFC، مقتبسًا حرفيًا، والصفحة التي تذكر فيها Google متطلبها الخاص. جُمعت يدويًا بدلًا من إنشائها آليًا، لذا يمكن الاعتماد عليها. |
| الإصلاحات[] | ما يجب تغييره، بالترتيب، مع النقاط التي يستحقها كل تغيير. تُحسب المكاسب بإعادة تقييم التقرير، ولا تُقدّر تقديرًا. |
| مكتمل | تكون القيمة خطأ عندما يتعذر تشغيل فحص. العنصر الذي لم يُفحص لا يُعد ناجحًا أبدًا، لذا تعامل مع النتيجة على أنها متفائلة حتى تصبح القيمة صحيحة. |
| رابط_التقرير | الصفحة المقروءة للبشر. أعطها لشخص بدلًا من جدار من JSON. |
الحالات
يكون الفحص واحدًا من خمسة أشياء، والفرق بين اثنين منها أهم مما يبدو.
| ناجح | تم تشغيل الفحص ولم يجد أي خطأ. |
| تحذير | يستحق الإصلاح. يكلّف نقاطًا. |
| فاشل | سيضرّ بقابلية التسليم. يكلّف نقاطًا أكثر. |
| تخطي | لم ينطبق. لا توجد مرفقات لفحصها، ولا جزء HTML لتقييمه. لا يُعد نجاحًا. |
| خطأ | لم نتمكن من معرفة ذلك. يُستبعد من النتيجة ويُعلَّم، بدلًا من احتسابه نجاحًا. |
يمر analysis_status بالقيم received وanalyzing وchecks_ready وfailed. ويمر ai_status بالقيم pending وrunning وready وfallback وerror. يصبح التقرير الحتمي نهائيًا عند checks_ready؛ ولا يضيف ai_status سوى الخطة.
ما يمكن أن يعود
| 202 | العنوان محجوز ولم تصل أي رسالة. يتضمن المتن العنوان ووقت انتهاء الصلاحية واللغة، بحيث يظل بإمكان المستدعي الذي لم ينشئ الحجز عرضه. |
| 404 | لا توجد معرّفة مختصرة كهذه. إما أنها لم توجد قط، أو أن الحجز قد نُسي. |
| 410 | انتهت صلاحية العنوان قبل وصول رسالة. |
| 409 | حاولت تغيير اللغة بعد وصول الرسالة بالفعل. |
| 429 | حد الاختبارات المجانية لعنوانك. لا يوجد حالياً حد لكل شخص في هذه الخدمة؛ وإذا وُضع حد في أي وقت، فسيبيّن المتن وقت إعادة تعيينه. |
أربعة أمور يجدر معرفتها
رسالة واحدة لكل عنوان
تُرفض الرسالة الثانية. يبقى تقريرك السابق كما هو، وهذا هو المقصود.
ساعة واحدة لاستخدامه
تنتهي صلاحية العنوان؛ أما التقرير فلا. روابط التقارير دائمة، لذا يستمر عمل أي رابط يُلصق في تذكرة.
أرسل من المنصة
اختبار حملة من حساب شخصي يقيس ذلك الحساب. كل ما في قسم المصادقة تقريبًا يتعلق بالبنية التحتية للإرسال، لا بالنص.
أعد الاختبار بعد الإصلاح
تُحسب التحسينات المتوقعة لكل إصلاح على حدة، ولا تتراكم. التقرير الثاني هو الرقم الفعلي.
للأنظمة الآلية
- /api/openapi.json وصف OpenAPI، المُنشأ من الكود نفسه الذي يشغّل API.
- /llms.txt, /llms-full.txt خريطة قصيرة لهذا الموقع لنماذج اللغة، وفق اصطلاح llms.txt، ونسخة أطول تحتوي على الحلقة كاملة وحقول التقرير في ملف واحد.
- /mcp خادم MCP يتمتع بالإمكانات نفسها وانتظار حاجب، وهو أفضل من الاستقصاء من داخل نموذج.
- For agents صفحة الوكيل: متى تستخدم هذا، وكيف تقرأ فحصًا تم تخطيه مقارنةً بفحص ناجح، وأي النتائج هي سجلات DNS يتعين على شخص تغييرها بدلًا من نص يمكن للوكيل تعديله.