サンドボックスで試す → すべてのエンドポイントに、ライブサービスに対して実行するボタンがあります。ここではキーは不要なので、このページから送信するリクエストは実際のものです。実際のアドレスを予約し、件数にカウントされます。
処理の流れ
2回のリクエストと1通のメール。3回目の呼び出しが必要なのは、分析に数秒かかるためです。
アドレスを予約
inboxエンドポイントにPOSTします。正確に1通のメッセージだけを受信し、1時間で期限切れになるアドレスと、その他すべてのキーとなるスラッグが返されます。
実際のメッセージをそこに送信
キャンペーンを送信するプラットフォームから、SMTP経由で送信します。チェックの半数は送信プラットフォームが追加するヘッダーを確認するため、手作業で作成したメッセージでは誤った対象を測定することになります。
ステータスをポーリングしてからレポートを取得
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つのステータスフィールドとチェックの進捗状況だけを返します。
GET/api/v1/tests/{slug}
レポート全体です。アドレスが予約済みでまだ何も到着していない間は202で応答し、到着後は200で応答します。
GET/api/v1/tests/{slug}/message
配信されたとおりのメッセージです。ワイヤ上の順序どおりのすべてのヘッダー、両方の本文、添付ファイル一覧、未加工のソースが含まれます。レポートはポーリングされ、これは1メガバイトに達することがあるため、別途取得します。
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件。それぞれにステータス、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回目のレポートが実際の数値です。
マシン向け
- /api/openapi.json APIを提供するものと同じコードから生成されたOpenAPI記述。
- /llms.txt, /llms-full.txt 言語モデル向けのこのサイトの短いマップ(llms.txt規約に準拠)と、ループ全体およびレポートのフィールドを1つのファイルに収めた長いバージョン。
- /mcp 同じ機能とブロッキング待機を備えたMCPサーバー。モデル内からポーリングするより優れています。
- For agents エージェント向けページ:これを使う場面、スキップされたチェックと合格したチェックの読み分け方、エージェントが編集できるテキストではなく人が変更する必要があるDNSレコードに該当する検出結果。