一時メール API · MCP

E2EテストとAIエージェントのための一時メール API・MCPサーバー

REST・MCPで使い捨ての受信箱を作成し、次のメールを待って、届いたメールのコード・リンク・添付ファイルを読み取れます。

TempGenerator準備しています…

今すぐ試す

アカウントは不要です。非公開の受信箱を1つ、最大10分間利用でき、いつでも削除できます。新しいお試し受信箱は、ネットワークごとに10分に1回作成できます。

お試し
登録不要 · 受信箱1つ · 10分 · このタブのみ
開発者トークン
確認済みアカウント · 同時に受信箱5個 · 最大60分 · RESTとMCP
APIキーを管理

メールアドレスを確認すると、権限を限定した失効可能なAPIキーを作成できます。

  1. 受信箱を作成
  2. メールを待つ
  3. メールを読む

非公開のお試し受信箱

試用キーはこのタブのメモリ内にのみ保持されます。再読み込みするとアクセスできなくなりますが、受信箱はそのまま自動で期限切れになります。

    メールはプレーンテキストで表示されます。コードとリンクは自動で検出されますが、開かれることはありません。添付ファイルは非公開APIを通じてダウンロードされます。

    curl でクイックスタート

    受信箱を作成し、次のメールを待って読み取り、受信箱を削除します。APIキーは TEMPGENERATOR_TOKEN に保存し、URLには絶対に含めないでください。

    curl と jq が必要です。スクリプトは最大3回、毎回20秒まで待機し、各メールの件名・コード・リンク・本文を表示してから受信箱を削除します。

    bash
    export TEMPGENERATOR_URL='https://www.tempgenerator.com'
    API="$TEMPGENERATOR_URL/developer-api/v1"
    AUTH="Authorization: Bearer $TEMPGENERATOR_TOKEN"
    INBOX=$(curl --fail-with-body -sS -X POST "$API/inboxes" -H "$AUTH" -H 'Accept: application/json')
    ID=$(printf '%s' "$INBOX" | jq -r .id)
    echo "Send a test email to $(printf '%s' "$INBOX" | jq -r .address)"
    for ATTEMPT in 1 2 3; do
      RESULT=$(curl --fail-with-body -sS "$API/inboxes/$ID/wait?after=0&timeout=20" -H "$AUTH" -H 'Accept: application/json')
      [ "$(printf '%s' "$RESULT" | jq -r .status)" = message ] && break
    done
    for MESSAGE in $(printf '%s' "$RESULT" | jq -r '.messages[].id'); do
      curl --fail-with-body -sS "$API/inboxes/$ID/messages/$MESSAGE" -H "$AUTH" -H 'Accept: application/json' \
        | jq '{subject, codes, links, text}'
    done
    curl --fail-with-body -sS -X DELETE "$API/inboxes/$ID" -H "$AUTH"

    APIの概要

    ベースURLは https://www.tempgenerator.com/developer-api/v1 です。すべてのリクエストで Authorization: Bearer <key> を送信してください。レスポンスはJSONで、エラーは {"error": {"code", "message", "retry_after"}} の形式です。上限超過エラーでは Retry-After ヘッダーも返されます。

    • POST /inboxes 受信箱を作成し、アドレスと有効期限を取得
    • GET /inboxes/{id}/wait?after=0&timeout=20 カーソル以降の次のメールを最大20秒待機
    • GET /inboxes/{id}/messages?after=0 カーソル以降のメールを古い順に最大50件取得
    • GET /inboxes/{id}/messages/{message_id} 1通のメールを読み取り(本文・コード・リンク・添付ファイル一覧)
    • GET /inboxes/{id}/messages/{message_id}/attachments/{index} インデックスを指定して添付ファイルを1つダウンロード
    • DELETE /inboxes/{id} 受信箱とそのメールを即時に削除

    一覧取得と待機では、任意で from と subject_contains のフィルターを使えます。差出人と件名を、大文字と小文字を区別しない「部分一致」で絞り込みます。

    読み取りレスポンスの例

    json
    {
        "id": 42,
        "from": "no-reply@app.example",
        "subject": "Your verification code",
        "received_at": "2026-10-03T09:41:07+00:00",
        "text": "Your verification code is 482913.\nOr confirm: https://app.example/verify?token=8f3c",
        "text_truncated": false,
        "codes": [
            "482913"
        ],
        "links": [
            "https://app.example/verify?token=8f3c"
        ],
        "expires_at": "2026-10-03T10:40:12+00:00",
        "attachments": [
            {
                "index": 0,
                "filename": "receipt.pdf",
                "size": 48213
            }
        ],
        "untrusted_content": true
    }

    開発者トークン

    メールアドレスの確認後、「開発者アクセス」でAPIキーを作成できます。読み取りと書き込みのキーは受信箱の作成・読み取り・削除が、読み取り専用キーは一覧取得・待機・読み取り・ダウンロードができます。キーは90日後に期限切れになり、1アカウントあたり有効なキーを10個まで保持できます。キーの失効は即時に反映されます。

    各キーは一度だけ表示され、SHA-256 ハッシュとしてのみ保存されます。キーを失効させても、そのキーの受信箱は削除されません。受信箱が期限切れになるか削除されるまで、同じアカウントの他の有効なキーから引き続きアクセスできます。

    APIキーを管理

    sleep() を使わずに次のメールを待つ

    GET …/wait はリクエストを開いたまま保持し、メールが届くとすぐに応答します。届かない場合は、タイムアウト(最大20秒)後に status timeout を返します。前回のレスポンスの next_cursor を after として渡せば、同じメールを二度読むことはありません。

    タイムアウトは配信の失敗ではありません。同じカーソルでもう一度待機してください。待機は受信箱ごとに1つだけ実行され、同じ受信箱で新しい待機を始めると古い待機と置き換わります。異なる受信箱の待機は並行して実行されます(1アカウントにつき同時に2件まで)。

    Playwright・Cypress・pytest・CIのE2Eテストでメールを検証

    テストごとに専用の受信箱を用意し、アプリに登録メールやパスワード再設定メールを送信させ、届くのを待ってからコードやリンクを検証します。受信箱は後処理(teardown)で削除してください。

    キーはCIのシークレットとして保存してください(例:GitHub Actions の TEMPGENERATOR_TOKEN)。Cypress では cy.request で同じHTTP呼び出しができ、下の Python のレシピは pytest をはじめ任意のテストランナーで動作します。

    Playwright (TypeScript)

    TypeScript
    import { test, expect } from '@playwright/test';
    
    const api = `${process.env.TEMPGENERATOR_URL}/developer-api/v1`;
    const headers = { Authorization: `Bearer ${process.env.TEMPGENERATOR_TOKEN}`, Accept: 'application/json' };
    
    async function call(path: string, method = 'GET') {
      const response = await fetch(api + path, { method, headers });
      if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);
      return response.status === 204 ? null : response.json();
    }
    
    async function waitForCode(inboxId: string, after = 0): Promise<string> {
      for (let attempt = 0; attempt < 3; attempt++) {
        const result = await call(`/inboxes/${inboxId}/wait?after=${after}&timeout=20`);
        for (const summary of result.messages) {
          const message = await call(`/inboxes/${inboxId}/messages/${summary.id}`);
          if (message.codes.length) return message.codes[0];
        }
        after = result.next_cursor;
      }
      throw new Error('No verification code arrived');
    }
    
    test('signup sends a verification code', async ({ page }) => {
      const inbox = await call('/inboxes', 'POST');
      try {
        await page.goto('/signup');
        await page.getByLabel('Email').fill(inbox.address);
        await page.getByRole('button', { name: 'Create account' }).click();
        await page.getByLabel('Verification code').fill(await waitForCode(inbox.id));
        await expect(page.getByText('Welcome')).toBeVisible();
      } finally {
        await call(`/inboxes/${inbox.id}`, 'DELETE');
      }
    });

    GitHub Actions

    YAML
    - name: End-to-end tests
      run: npx playwright test
      env:
        TEMPGENERATOR_URL: https://www.tempgenerator.com
        TEMPGENERATOR_TOKEN: ${{ secrets.TEMPGENERATOR_TOKEN }}

    Python で登録メールを確認

    環境変数を設定してから実行してください。新しい受信箱が表示されたら、自分のテストアプリからそのアドレスに登録メールを送り、Enter キーを押します。スクリプトは最大15秒待機し、各メールをコードとリンク付きで表示します。読み取りに失敗しても受信箱は削除されます。

    Python
    import json, os
    from urllib.request import Request, urlopen
    
    base = os.environ["TEMPGENERATOR_URL"].rstrip("/") + "/developer-api/v1"
    headers = {"Authorization": "Bearer " + os.environ["TEMPGENERATOR_TOKEN"],
               "Accept": "application/json"}
    
    def request(path, method="GET"):
        with urlopen(Request(base + path, headers=headers, method=method), timeout=30) as response:
            return json.load(response) if response.status != 204 else None
    
    inbox = request("/inboxes", "POST")
    print(json.dumps(inbox), flush=True)
    try:
        input()
        result = request("/inboxes/" + inbox["id"] + "/wait?after=0&timeout=15")
        print(json.dumps(result))
        for message in result["messages"]:
            detail = request("/inboxes/" + inbox["id"] + "/messages/" + str(message["id"]))
            print(json.dumps(detail))
    finally:
        request("/inboxes/" + inbox["id"], "DELETE")

    AIエージェント向けMCPサーバー

    エンドポイントは https://www.tempgenerator.com/mcp で、Authorization: Bearer <key> で認証します。トランスポートは Streamable HTTP(プロトコル 2026-07-28)で、古いクライアントには 2025-11-25 または 2025-06-18 のハンドシェイクで対応します。

    クライアントを接続

    Claude Code

    bash
    claude mcp add --transport http tempgenerator-mail https://www.tempgenerator.com/mcp \
      --header "Authorization: Bearer $TEMPGENERATOR_TOKEN"

    Cursor: .cursor/mcp.json

    JSON
    {
      "mcpServers": {
        "tempgenerator-mail": {
          "url": "https://www.tempgenerator.com/mcp",
          "headers": { "Authorization": "Bearer ${env:TEMPGENERATOR_TOKEN}" }
        }
      }
    }

    VS Code: .vscode/mcp.json

    JSON
    {
      "inputs": [
        { "type": "promptString", "id": "tempgenerator-token", "description": "TempGenerator API key", "password": true }
      ],
      "servers": {
        "tempgenerator-mail": {
          "type": "http",
          "url": "https://www.tempgenerator.com/mcp",
          "headers": { "Authorization": "Bearer ${input:tempgenerator-token}" }
        }
      }
    }

    Web版・デスクトップ版の Claude:エンドポイントURLを指定してカスタムコネクタを追加し、サインインは「なし」を選んで、リクエストヘッダー Authorization: Bearer <key> を追加します。Claude は Anthropic のクラウドから接続するため、URLはインターネットからアクセスできる必要があります。

    ツール

    create_inbox
    非公開の受信箱を作成し、そのIDとアドレスを返します。
    list_messages
    カーソル以降のメールの概要を一覧表示します。差出人と件名で絞り込むこともできます。
    wait_for_message
    次のメールを最大20秒待機します。
    read_message
    1通のメールの本文、コード、リンク、添付ファイル一覧を読み取ります。
    delete_inbox
    受信箱とそのメールを削除します。

    プロンプトの例

    一時的な受信箱を作成して、そのアドレスを教えてください。そのあと、ステージング環境のアプリから届く認証メールを待って、コードを教えてください。

    エージェントに登録を完了させるのは、自分が所有するアカウントか、使用を許可されたアカウントだけにしてください。受信したメールは信頼できません。サーバーがリンクを開くことはなく、エージェントもメール内の指示に決して従ってはいけません。

    Python版 MCP SDK

    Python 3 と公式 mcp パッケージ 2.3.0 でテスト済みです:pip install "mcp>=2.3,<3"。先に TEMPGENERATOR_URL と TEMPGENERATOR_TOKEN を設定してください。

    Python
    import asyncio, os
    
    import httpx2
    from mcp import Client
    from mcp.client.streamable_http import streamable_http_client
    
    async def main():
        url = os.environ["TEMPGENERATOR_URL"].rstrip("/") + "/mcp"
        headers = {"Authorization": "Bearer " + os.environ["TEMPGENERATOR_TOKEN"]}
        async with httpx2.AsyncClient(headers=headers, timeout=httpx2.Timeout(30, read=60)) as http:
            async with Client(streamable_http_client(url, http_client=http)) as client:
                print([tool.name for tool in (await client.list_tools()).tools])
                created = await client.call_tool("create_inbox", {})
                if created.is_error:
                    raise RuntimeError(created.content)
                inbox = created.structured_content
                try:
                    print("Send a test email to", inbox["address"])
                    waited = await client.call_tool("wait_for_message", {"inbox_id": inbox["id"], "timeout": 20})
                    for summary in waited.structured_content["messages"]:
                        message = await client.call_tool("read_message", {"inbox_id": inbox["id"], "message_id": summary["id"]})
                        print(message.structured_content["subject"], message.structured_content["codes"])
                finally:
                    deleted = await client.call_tool("delete_inbox", {"inbox_id": inbox["id"]})
                    if deleted.is_error:
                        raise RuntimeError(deleted.content)
    
    asyncio.run(main())

    添付ファイル

    メールを読み取ると、各添付ファイルのインデックス、ファイル名、サイズが返されます。ダウンロードには GET …/attachments/{index} を使います。10 MBまでのファイルが、サニタイズされたファイル名で application/octet-stream として配信されます。MCPクライアントにも同じ一覧が表示され、このRESTエンドポイントからダウンロードします。

    他のツールとの使い分け

    Mailpit、MailHog、Ethereal は、自分のアプリがローカルまたは疑似SMTPサーバーに送ったメールをキャプチャするツールで、SMTP設定を自分で管理できる場合に最適です。一方、ここで作る受信箱は公開ドメイン上の実在するアドレスなので、どの送信者からでもメールが届きます。たとえば外部サービス、実際のメール配信プロバイダーを使うステージングサーバー、本番に近いフローなどです。

    mail.tm や Guerrilla Mail などの一般的な一時メール API は、個人用の使い捨てアドレス向けに作られています。このAPIは自動化向けで、権限と有効期限付きのキー、テストごとに1つの受信箱、上限付きのロングポーリング待機、コードとリンクの検出、MCPサーバーを備えています。

    含まれないもの:メール送信、SMS、HTML・スパム判定のプレビュー、独自ドメイン、MCPクライアント向けのOAuthサインイン。

    保存期間・制限・セキュリティ

    制限項目お試し開発者トークン
    受信箱の有効期間10分最大60分
    有効な受信箱1個アカウントあたり5個
    受信箱の新規作成ネットワークごとに10分に1個1時間あたり20個
    APIリクエスト1分あたり120回1分あたり120回
    ロングポーリング待機最大20秒、受信箱ごとに1つ最大20秒、受信箱ごとに1つ、同時に2件まで
    受信箱あたりのメール数最大10通最大10通
    返されるメール本文先頭128 KBまで先頭128 KBまで
    添付ファイルのダウンロード1件あたり最大10 MB1件あたり最大10 MB
    アクセスこのブラウザタブのみキーを使ったREST APIとMCP

    受信ドメインによっては、より短い有効期間や、より少ないメール数の上限が設定される場合があります。

    受信専用です。メールと添付ファイルは信頼できないものとして扱ってください。自動で開かれるものはありません。受信箱を削除するとメールはすぐに削除され、期限切れの受信箱は定期クリーンアップで削除されます。

    よくある質問

    一時メール API(捨てメアド API)とは何ですか?

    使い捨てのメール受信箱を必要なときに作成し、届いたメールをコードから読み取れるHTTP APIです。このサービスの受信箱はそれぞれあなたのキー専用で、自動的に期限切れになり、RESTまたはMCPで読み取れます。

    アカウントは必要ですか?

    お試しなら不要です。お試しでは、ブラウザ内に非公開の受信箱を1つ、10分間作成します。APIキー、MCP、より長く使える受信箱を利用するには、アカウントを作成してメールアドレスを確認してください。

    受信箱はどのくらいの期間使えますか?

    お試し受信箱の有効期間は10分です。開発者トークンで作成した受信箱は最大60分で、受信ドメインがより短い有効期間を設定している場合はそちらが適用されます。受信箱はいつでも削除できます。

    E2Eテストでメールの到着を待つには?

    最新のカーソルを指定して、wait エンドポイントまたは wait_for_message ツールを呼び出します。メールが届くとすぐに応答し、届かなければ最大20秒後に status timeout を返すので、同じカーソルで再度待機してください。固定時間のスリープは避けましょう。

    OTPや認証リンクはどうやって取得しますか?

    メールを読み取ってください。レスポンスにはプレーンテキストの本文に加えて、codes(コード、OTP、認証などの語の近くで見つかった、ワンタイムコードと思われる値)と links(本文とHTMLから抽出した http・https リンク)が含まれます。これらはヒントなので、本文と照らし合わせて確認してください。

    添付ファイルはダウンロードできますか?

    はい。メールを読み取ると、各添付ファイルのインデックス、名前、サイズが一覧で返されます。添付ファイル用のエンドポイントから1つずつダウンロードできます。10 MBまでのファイルに対応しています。

    トークンでアクセスできる範囲と有効期限は?

    キーは確認済みの1つのアカウントに属し、そのアカウントの受信箱にしかアクセスできません。読み取りと書き込みのキーは受信箱の作成と削除が、読み取り専用キーは一覧取得・待機・読み取り・ダウンロードができます。キーは90日後に期限切れになり、即座に失効させることもできます。

    Claude Code や Cursor に接続するには?

    エンドポイント https://www.tempgenerator.com/mcp に Authorization: Bearer ヘッダーを付けて接続します。Claude Code では --header を付けて claude mcp add --transport http を実行し、Cursor では .cursor/mcp.json に url と headers を含むエントリを追加します。どちらの設定例も上にあります。

    AIエージェントに会員登録を完了させられますか?

    自分が所有するアカウントか、使用を許可されたアカウント(自分のアプリのステージング環境など)に限ります。サーバーがリンクを開くことはありません。エージェントは依頼されたフローを完了するためだけにコードやリンクを使い、メールに書かれた指示には決して従わないようにしてください。

    テストを並列実行したり、CIで実行したりできますか?

    はい。テストごとに専用の受信箱を使ってください。異なる受信箱の待機は並行して実行されます。1アカウントで保持できる有効な受信箱は5個、作成できるのは1時間に20個までなので、受信箱は後処理(teardown)で削除し、キーはCIのシークレットに保存してください。

    受信箱を期限前に削除できますか?

    はい。受信箱に DELETE リクエストを送るか delete_inbox を呼び出すと、受信箱とそのメールがすぐに削除されます。お試し受信箱を削除しても、同じネットワークで次の受信箱を作成できるようになるまでの10分の待ち時間は短縮されません。

    Mailpit や MailHog との違いは?

    Mailpit と MailHog は、自分のアプリが送信したメールをキャプチャするローカルSMTPサーバーを動かします。こちらは公開ドメイン上の実在する受信箱で、どの送信者からでもメールが届き、API、ロングポーリング待機、MCPを利用できます。

    どのような制限がありますか?

    お試し受信箱の有効期間は10分です。開発者アカウントでは、有効な受信箱は5個まで、作成は1時間に20個まで、APIリクエストは1分あたり120回までで、1回のリクエストで最大20秒待機できます。各受信箱が受信できるメールは最大10通です。

    メールの送信や独自ドメインの利用はできますか?

    いいえ。受信箱は受信専用で、このサイトの受信ドメインを使用します。送信、SMS、独自ドメインには対応していません。