Email Spam Tester

API

Три виклики. Без ключа, облікового запису та реєстрації.

Зарезервуйте адресу, надішліть лист, який ви збиралися надіслати своєму списку розсилки, прочитайте звіт. У JSON є все, що показує сторінка, включно з оцінкою, усіма 41 перевіркою та їхніми доказами, а також розділом стандарту, на якому ґрунтується кожен висновок.

Перші 100 000 звітів безкоштовні, без ключа й облікового запису. Якщо ви налаштовуєте агент, а не скрипт, сервер MCP підходить краще, ніж опитування.

Спробувати в пісочниці → Кожна кінцева точка має кнопку, яка запускає її в реальному сервісі. Тут ключ не потрібен, тому запит, який ви надсилаєте з цієї сторінки, є справжнім: він резервує справжню адресу та враховується.

Цикл

Два запити й один лист. Третій виклик потрібен лише тому, що аналіз триває кілька секунд.

  1. Зарезервуйте адресу

    Надішліть POST-запит до кінцевої точки inbox. У відповідь ви отримаєте адресу, яка приймає рівно один лист і втрачає чинність через годину, а також слаг, за яким визначається все інше.

  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_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 зазначає власну вимогу. Підібрано вручну, а не згенеровано, тому на них можна покладатися.
fixes[]Що змінити, у якому порядку та скільки балів дає кожна зміна. Приріст обчислюється повторним оцінюванням звіту, а не приблизно.
completeFalse, якщо перевірку не вдалося виконати. Неперевірений пункт ніколи не вважається пройденим, тому вважайте оцінку оптимістичною, доки це значення не стане true.
report_urlСторінка у форматі, зручному для читання людиною. Передайте її людині замість стіни JSON.

Статуси

Перевірка має один із п’яти станів, і різниця між двома з них важливіша, ніж здається.

passПеревірку виконано, і проблем не виявлено.
warnВарто виправити. Зменшує кількість балів.
failПогіршить доставлення. Коштує більше балів.
пропущеноНе застосовувалося. Немає вкладень для сканування, немає 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.

Отримати тестову адресу