Email Spam Tester

واجهة API

ثلاثة استدعاءات. بلا مفتاح، بلا حساب، بلا تسجيل.

احجز عنوانًا، وأرسل الرسالة التي كنت على وشك إرسالها إلى قائمتك، ثم اقرأ التقرير. كل ما تعرضه الصفحة موجود في JSON، بما في ذلك النتيجة، وجميع الفحوصات الـ41 مع أدلتها، وقسم المعيار الذي تستند إليه كل نتيجة.

أول 100,000 تقرير مجاني، من دون مفتاح ومن دون حساب. إذا كنت تربط وكيلاً بدلاً من برنامج نصي، فإن خادم MCP أنسب من الاستقصاء الدوري.

جرّبه في البيئة المعزولة → كل نقطة نهاية مزودة بزر يشغّلها على الخدمة الفعلية. لا يتطلب أي شيء هنا مفتاحًا، لذا فإن أي طلب ترسله من هذه الصفحة هو طلب حقيقي: فهو يحجز عنوانًا حقيقيًا ويُحتسب.

التدفق

طلبان ورسالة بريد إلكتروني واحدة. الاستدعاء الثالث موجود فقط لأن التحليل يستغرق بضع ثوانٍ.

  1. احجز عنوانًا

    أرسل طلب POST إلى نقطة نهاية صندوق الوارد. ستحصل على عنوان يقبل رسالة واحدة فقط وتنتهي صلاحيته خلال ساعة، بالإضافة إلى المعرّف المختصر الذي يُستخدم مفتاحًا لكل ما عدا ذلك.

  2. أرسل إليه الرسالة الفعلية

    عبر SMTP، ومن المنصة التي سترسل الحملة. نصف الفحوصات يقرأ الترويسات التي تضيفها منصة الإرسال، لذا فإن رسالة مُنشأة يدويًا تقيس الشيء الخطأ.

  3. استقصِ الحالة، ثم اقرأ التقرير

    حجم نقطة نهاية الحالة بضع مئات من البايتات، وهي تخبرك بما إذا كان التقرير الكامل يستحق الجلب بعد. أما التقرير نفسه فيمتد إلى عدة آلاف من الأسطر.

# 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

قليلة التكلفة عند الاستطلاع. تُرجع حقلي الحالة ومدى تقدم الفحوصات، ولا شيء غير ذلك.

استطلع هذه بدلًا من التقرير. تصل analysis_status أولًا إلى checks_ready، ثم تصل خطة AI ضمن ai_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حد الاختبارات المجانية لعنوانك. لا يوجد حالياً حد لكل شخص في هذه الخدمة؛ وإذا وُضع حد في أي وقت، فسيبيّن المتن وقت إعادة تعيينه.

أربعة أمور يجدر معرفتها

رسالة واحدة لكل عنوان

تُرفض الرسالة الثانية. يبقى تقريرك السابق كما هو، وهذا هو المقصود.

ساعة واحدة لاستخدامه

تنتهي صلاحية العنوان؛ أما التقرير فلا. روابط التقارير دائمة، لذا يستمر عمل أي رابط يُلصق في تذكرة.

أرسل من المنصة

اختبار حملة من حساب شخصي يقيس ذلك الحساب. كل ما في قسم المصادقة تقريبًا يتعلق بالبنية التحتية للإرسال، لا بالنص.

أعد الاختبار بعد الإصلاح

تُحسب التحسينات المتوقعة لكل إصلاح على حدة، ولا تتراكم. التقرير الثاني هو الرقم الفعلي.

للأنظمة الآلية

جرّب واحدًا يدويًا أولًا

يستغرق الأمر نحو دقيقة ويوضح لك بالضبط ما يصفه JSON.

احصل على عنوان اختبار