Email Spam Tester

API

3回の呼び出し。キー、アカウント、登録は不要です。

アドレスを予約し、配信リストに送ろうとしていたメッセージを送信して、レポートを確認します。ページに表示されるすべての情報がJSONに含まれています。スコア、根拠を含む41項目すべてのチェック、および各検出結果の根拠となる標準のセクションも含まれます。

最初の100,000件のレポートは、キーもアカウントも不要で無料です。スクリプトではなくエージェントを接続する場合は、ポーリングよりもMCPサーバーの方が適しています。

サンドボックスで試す → すべてのエンドポイントに、ライブサービスに対して実行するボタンがあります。ここではキーは不要なので、このページから送信するリクエストは実際のものです。実際のアドレスを予約し、件数にカウントされます。

処理の流れ

2回のリクエストと1通のメール。3回目の呼び出しが必要なのは、分析に数秒かかるためです。

  1. アドレスを予約

    inboxエンドポイントにPOSTします。正確に1通のメッセージだけを受信し、1時間で期限切れになるアドレスと、その他すべてのキーとなるスラッグが返されます。

  2. 実際のメッセージをそこに送信

    キャンペーンを送信するプラットフォームから、SMTP経由で送信します。チェックの半数は送信プラットフォームが追加するヘッダーを確認するため、手作業で作成したメッセージでは誤った対象を測定することになります。

  3. ステータスをポーリングしてからレポートを取得

    statusエンドポイントのレスポンスは数百バイトで、完全なレポートを取得する段階かどうかを確認できます。レポート自体は数千行に及びます。

# 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

1回限り使用できるアドレスを予約します。両方のパラメーターは任意です。

lang修正計画と各チェックの結果を記述する言語をISOコードで指定します。メッセージは数分後にSMTP経由で到着し、誰が待っているかを示す情報を持たないため、この時点で決定します。不明なコードの場合は英語にフォールバックします。
utm_source, utm_medium, utm_campaign当社の分析にそのまま渡されます。独自の連携を測定する場合に役立ちます。

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

低コストでポーリングできます。2つのステータスフィールドとチェックの進捗状況だけを返します。

レポートではなく、これをポーリングしてください。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件。それぞれにステータス、1行の所見、判断の根拠となった証拠、および2つのスコアへの影響が含まれます。
checks[].citations検出結果の根拠: RFCの該当セクションからの原文どおりの引用、およびGoogleが独自の要件を記載しているページ。自動生成ではなく手作業で選定されているため、信頼できます。
fixes[]変更すべき内容を、各変更で得られるポイントとともに順番に示します。増加ポイントは推定ではなく、レポートを再採点して計算されます。
completeチェックを実行できなかった場合はFalseです。未チェックの項目が合格になることはないため、trueになるまではスコアを楽観的な値として扱ってください。
report_url人が読めるページです。大量のJSONではなく、こちらを担当者に渡してください。

ステータス

チェックには5つの状態があり、そのうち2つの違いは見た目以上に重要です。

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あなたのアドレスに対する無料テストの上限です。現在、このサービスには個人ごとの上限はありません。今後設定された場合は、本文にリセット時刻が示されます。

知っておくべき4つのこと

アドレスごとに1通

2通目は拒否されます。以前のレポートはそのまま残り、それが狙いです。

利用できるのは1時間

アドレスには有効期限がありますが、レポートにはありません。レポートのリンクは永続的なので、チケットに貼り付けたリンクは引き続き機能します。

プラットフォームから送信

個人アカウントからキャンペーンをテストすると、そのアカウントを測定することになります。認証セクションのほぼすべては、テキストではなく送信インフラストラクチャに関するものです。

修正後に再テスト

予想される改善幅は修正ごとに個別に計算され、合算できません。2回目のレポートが実際の数値です。

マシン向け

まずは1件、手動で試す

約1分で完了し、JSONが記述する内容を正確に確認できます。

テスト用アドレスを取得