Email Spam Tester

API

Три вызова. Без ключа, учётной записи и регистрации.

Зарезервируйте адрес, отправьте сообщение, которое вы собирались отправить своему списку рассылки, и прочитайте отчёт. Всё, что показано на странице, есть в JSON, включая оценку, все 41 проверку с подтверждающими данными и раздел стандарта, на котором основан каждый результат.

Первые 100 000 отчётов бесплатны, без ключа и без учётной записи. Если вы подключаете агент, а не скрипт, сервер MCP подходит лучше, чем опрос.

Попробовать в песочнице → Каждая конечная точка снабжена кнопкой, которая запускает запрос к рабочему сервису. Здесь нигде не нужен ключ, поэтому запрос, отправленный с этой страницы, является реальным: он резервирует реальный адрес и учитывается.

Цикл

Два запроса и одно письмо. Третий вызов нужен только потому, что анализ занимает несколько секунд.

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

    Отправьте POST-запрос к конечной точке входящих сообщений. В ответ вы получите адрес, который принимает ровно одно сообщение и истекает через час, а также slug, к которому привязано всё остальное.

  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.

Получить тестовый адрес