Email Spam Tester

API

호출 세 번. 키도, 계정도, 가입도 필요 없습니다.

주소를 예약하고, 목록에 보내려던 메시지를 보낸 다음, 보고서를 확인합니다. 점수, 근거가 포함된 41개 검사 전체, 각 결과의 근거가 되는 표준 섹션을 포함하여 페이지에 표시되는 모든 내용이 JSON에 들어 있습니다.

처음 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 계획은 약 1분 뒤 ai_status에 들어오므로, 결정론적 검사만 필요한 호출자는 계획을 기다릴 필요가 없습니다.

GET/api/v1/tests/{slug}

전체 보고서입니다. 주소가 예약된 상태이고 아직 아무것도 도착하지 않았으면 202로 응답하고, 도착한 뒤에는 200으로 응답합니다.

GET/api/v1/tests/{slug}/message

전달된 그대로의 메시지입니다. 전송 순서의 모든 헤더, 두 본문, 첨부 파일 목록과 원시 소스를 포함합니다. 보고서는 폴링되고 이것은 최대 1메가바이트에 달할 수 있으므로 별도로 가져옵니다.

원본 메시지는 보고서보다 먼저 자체 일정에 따라 삭제됩니다. 그 후에는 이 엔드포인트가 원본 대신 이유를 반환합니다.

PUT/api/v1/tests/{slug}/locale

아직 사용되지 않은 예약의 언어를 변경합니다. 이미 주소를 요청한 후 사용자가 읽는 언어를 알게 되는 에이전트를 위한 기능입니다. 메시지가 도착한 후에는 분석이 실행 중이므로 거부됩니다.

GET/api/health

활성 상태 확인. 인증이 없고 부작용도 없습니다.

보고서 읽기

원하는 순서대로 답을 제공하는 필드입니다.

score_ours0~100. 자체 모델. 인증과 인프라가 대부분의 가중치를 차지합니다. 필터가 본문의 단어를 읽기 전에 전송 여부를 결정하기 때문입니다.
score_compat0~10. 사람들이 이미 비교에 사용하는 SpamAssassin 방식의 수치를 재현하므로, 다른 곳에서 본 결과와 보고서를 비교할 수 있습니다.
subscores섹션별로 동일한 0~100 척도를 사용합니다: auth, infra_spam, content, compliance.
checks[]41개 항목 전체이며, 각 항목에는 상태, 한 줄 결과, 판단에 사용된 근거, 두 점수에 미친 영향이 포함됩니다.
checks[].citations결과의 근거: RFC의 해당 섹션과 원문 그대로 인용한 내용, 그리고 Google이 자체 요구사항을 명시한 페이지입니다. 자동 생성하지 않고 직접 선별했으므로 신뢰할 수 있습니다.
fixes[]변경해야 할 사항을 순서대로 제시하며, 각 변경으로 얻는 점수를 함께 표시합니다. 점수 상승분은 추정하지 않고 보고서를 다시 채점하여 계산합니다.
complete검사를 실행할 수 없으면 False입니다. 검사하지 않은 항목은 절대 통과로 간주되지 않으므로, 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해당 주소의 무료 테스트 한도입니다. 현재 이 서비스에는 개인별 한도가 없습니다. 추후 한도가 설정되면 본문에 재설정 시점이 표시됩니다.

알아둘 네 가지

주소당 메시지 하나

두 번째 메시지는 거부됩니다. 이전 보고서는 그대로 유지되며, 이것이 이 제한의 목적입니다.

사용 기한은 1시간

주소는 만료되지만 보고서는 만료되지 않습니다. 보고서 링크는 영구적이므로 티켓에 붙여 넣은 링크는 계속 작동합니다.

플랫폼에서 전송

개인 계정에서 캠페인을 테스트하면 해당 계정을 측정하게 됩니다. 인증 섹션의 거의 모든 내용은 텍스트가 아니라 전송 인프라에 관한 것입니다.

수정 후 다시 테스트

예상 개선치는 한 번에 하나의 수정 사항을 기준으로 계산되며 서로 합산되지 않습니다. 두 번째 보고서가 정확한 수치입니다.

머신용

먼저 직접 하나를 시도해 보세요

약 1분이 걸리며 JSON이 설명하는 내용을 정확히 보여줍니다.

테스트 주소 받기