使い捨てメール判定
ドメインを入力すると、使い捨てメールサービスのものかどうかが分かります。無料・登録不要。自社のドメインも隠さず判定対象にしています。
主要 20 ドメインの判定結果
この表の判定はチェッカーと同じデータから生成しているため、両者の結果が食い違うことはありません。「内容」の列はそのサービスが何であるかの説明で、「判定」の列はブロックリストがそのドメインをどう扱っているかを示します。
| ドメイン | 判定 | 内容 |
|---|---|---|
| gmail.com | 登録されていません | Google の個人向けメールサービス。 |
| outlook.com | 登録されていません | Microsoft の個人向けメールサービス。 |
| yahoo.com | 登録されていません | Yahoo メール。 |
| icloud.com | 登録されていません | Apple のメールサービス。Apple ID に紐づきます。 |
| proton.me | 登録されていません | プライバシー重視のメール事業者。無料・有料プランあり。 |
| qq.com | 登録されていません | Tencent QQ メール。中国で最も使われているサービスの一つ。 |
| 163.com | 登録されていません | NetEase メール。中国で広く使われています。 |
| gmx.com | 登録されていません | GMX。長年運営されている無料メール事業者。 |
| zoho.com | 登録されていません | Zoho Mail。法人や独自ドメイン向け。 |
| simplelogin.io | 登録されていません | エイリアス転送サービス。実際の受信箱に転送されます。 |
| duck.com | 登録されていません | DuckDuckGo Email Protection。エイリアス転送サービス。 |
| mailinator.com | 使い捨てとして登録済み | 登録不要で誰でも開ける公開型の使い捨て受信箱。 |
| yopmail.com | 使い捨てとして登録済み | 使い捨て受信箱サービス。 |
| guerrillamail.com | 使い捨てとして登録済み | 使い捨て受信箱サービス。現存する中で最も古いものの一つ。 |
| sharklasers.com | 使い捨てとして登録済み | Guerrilla Mail の別ドメインの一つ。 |
| 10minutemail.com | 使い捨てとして登録済み | 短時間で失効する使い捨て受信箱。 |
| temp-mail.org | 使い捨てとして登録済み | 多数の地域別ドメインを持つ使い捨て受信箱サービス。 |
| 1secmail.com | 使い捨てとして登録済み | 公開 API も提供している使い捨て受信箱サービス。 |
| trashmail.com | 使い捨てとして登録済み | 転送方式で有効期限のある使い捨てアドレス。 |
| moemail.app | これは当サービスのドメインです | 当サービスです。使い捨てメール事業者 —— 下記の説明をご覧ください。 |
なぜ「はい/いいえ」ではなく 2 段階なのか
多くの無料チェッカーは true か false だけを返します。しかしそれでは、本当に知りたいこと —— その答えがどれだけ確かなのか —— が分かりません。当サービスは審査基準の異なる 2 つのリストを使い、どちらに一致したのかをお伝えします。
登録済み
厳格に審査されたブロックリストに含まれています。項目は人の目で確認されており、誤検知はまれです。自動でブロックや警告を出すなら、このレベルを基準にしてください。
可能性あり
収録範囲を優先し精度を犠牲にしたリストにのみ含まれています。複数ある判断材料の一つとして有用です。このレベルだけでブロックすると、正当な利用者を時々拒否してしまいます。
未登録
どちらにも含まれていません。この結果が意味すること、しないことに注意してください。完全なブロックリストは存在せず、新しい使い捨てドメインは一定期間この判定を通過し続けます。
リストへの一致は証拠であって証明ではありません。実際に影響のある判断には、自分で確認できる情報 —— MX レコード、ドメインの登録時期、アカウントの挙動、確認メールなど —— を組み合わせてください。
エイリアスサービスは使い捨てメールとは違います
SimpleLogin、DuckDuckGo Email Protection、そして Gmail のプラスアドレスは、いずれも長く使う受信箱へ転送されるアドレスを提供します。アドレスは捨てられても、その先の受信箱は残ります。利用者はメールを読み、返信し、後からアカウントを復旧することもできます。
これらの扱いはリストによって異なるため、エイリアスのドメインが登録済みと表示されることもあります。ブロックを決める前に知っておく価値があります。エイリアス利用者を拒否すると、プライバシーを重視するだけの実在する顧客を追い返すことになります。使い捨て受信箱は数分で捨てられますが、エイリアスはそのために作られたアカウントより長く使われることもあります。
データ自体に矛盾があり、それを知っておく価値があります。addy.io は登録されているのに、同じ会社の旧ドメイン anonaddy.com は登録されていません。relay.firefox.com は登録されていますが、Firefox Relay が実際に発行するアドレスのドメインは mozmail.com で、そちらはまったく登録されていません。これらはいずれも「登録済み」ではなく「可能性あり」に分類されます。まさにこの区分が存在する理由です。
当サービスのドメインも使い捨てとして扱っています
MoeMail は使い捨てメールサービスです。当サービスのドメインはブロックリストが説明している通りの動作をするため、正直な答えはこうなります —— それらは元々リストに載るべきものであり、このチェッカーもそう表示します。
自社だけ黙って除外することもできましたが、しませんでした。理由は単純です。自分のドメインを試せば 5 秒で分かることであり、身内をかばうと分かったツールには何の価値もありません。サイトを運営していて使い捨ての登録を防ぎたいなら、このツールで当サービスもブロックできるべきです。
サイトは実際どのように使い捨てメールを見分けているのか
このようなリスト照合は最初の一層にすぎません。実際のシステムは複数の検査を重ねます。公開リストや商用リストとの照合、MX レコードを解決して実際にメールを受け取るかの確認、ドメインの登録時期、そして登録後のアカウントの挙動です。
だからこそ、どのリストにも無いアドレスが拒否されることもあり、使い捨てアドレスがすんなり通ることもあります。詳しくは別の記事にまとめています。
データの出典
このチェッカーはコミュニティが管理する 2 つのオープンなブロックリストを照会します。2 つめは集約ツールなので、それに流れ込んでいるリポジトリも下記で併せて明記し、いずれも出典へリンクしています。項目を手作業で編集するのではなく上流から再構築しているため、ここで得られる結果は公開されているものと一致します。
- disposable-email-domains/disposable-email-domainsCC0 1.0 Universal
- disposable/disposable-email-domainsMIT
- 7c/fakefilterBSD-3-Clause
- daisy1754/jp-disposable-emailsMIT
- disposable/static-disposable-listsMIT
- FGRibreau/mailcheckerMIT
- flotwig/disposable-email-addressesMIT
- GeroldSetz/emailondeck.com-domainsCC-BY-4.0
- GeroldSetz/Mailinator-DomainsCC-BY-4.0
- martenson/disposable-email-domainsno licence declared
- wesbos/burner-email-providersMIT
これはデータの出典を網羅したものではありません。集約ツールは使い捨てメールのウェブサイトも直接収集しており、そちらにはリポジトリもライセンスも存在しません。ソースは公開されているので、全体はご自身で確認できます: generator.py
リストをダウンロード
統合・重複除去したリストをテキストファイルで提供しています。1 行 1 ドメイン、キー不要、レート制限なし。ご自身のプロジェクトでお使いください。
disposable-domains.txtどちらのリストも最新であるとも網羅的であるとも主張していません。管理者自身がそう明言しています。ドメインは持ち主が変わり、サービスは終了し、新しいものが毎日生まれます。ここで得られる結果は、リアルタイムの権威ではなくコミュニティが維持しているスナップショットとして扱ってください。
無料の使い捨てメール判定 API
このページが実行しているのと同じ判定を、JSON エンドポイントとして提供します。API キーも登録も不要、追加購入するクォータもありません —— 登録フォームから、Worker から、シェルスクリプトからそのまま呼べます。上で説明しているのと同じ 2 つのリストを読むので、API が返す答えはこのページで見える答えとまったく同じです。
curl "https://moemail.app/api/tools/v1/disposable-email/check?domain=mailinator.com"エンドポイント
https://moemail.app/api/tools/v1/disposable-email/check?domain=…ドメイン 1 件、またはメールアドレス全体を判定します(ローカル部は捨てられます)。正規化後のドメインに対する判定を返します。
https://moemail.app/api/tools/v1/disposable-email/datasetいま回答しているのがリストのどのスナップショットかを返します:各層の件数、ビルド時刻、そして各上流ファイルをダウンロードした時点の SHA-256。どのデータがある判断を生んだのかを記録したい場合は、起動時に一度呼べば十分です。
レスポンスのフィールド
domainstring- 判定の対象となる正規化済みドメイン。小文字化し、ローカル部と末尾のドットを除去したものです。送った文字列ではなく、こちらと比較してください。
disposableboolean- いずれかのリストに載っていれば true(当社自身のドメインも含みます)。これは粗い答えです —— これで登録を弾く前に、下の警告を読んでください。
verdict"high" | "medium" | "none" | "ours"- どの層に一致したか。
highは人手で厳格に管理されたリスト。mediumは広範な集約リストにのみ存在。noneはどちらにもありません。oursは MoeMail 自身の受信ドメインで、実際に使い捨てであり、どのサードパーティのリストにも載っていません。
disposable だけで弾かないこと
把握している約 75,000 件のうち、medium が約 66,000 件を占めます。しかもそれは人手による確認を経ていない広範な集約リスト由来です。全部を弾けば、実在するユーザーを確実に巻き込みます。誤判定 1 件が顧客 1 人の損失になるなら、verdict === "high" だけを拒否対象にし、medium は「追加認証を求める理由」として扱ってください。「拒否する理由」ではありません。disposable があるのは、真偽値だけを返す API からそのまま乗り換えられるようにするためで、真偽値が正しい判断境界だからではありません。
エラー
どのエラーも、人間向けの error と並んで機械可読な code を持ちます。分岐は code で書いてください。文面はいつ書き換わるかわかりませんが、code は API のバージョンが変わらないかぎり変わりません。
| 400 | missing_domain | domain パラメータが無い、または空でした。 |
| 400 | invalid_domain | ドメインとして成立していません。domain が重複して渡された場合、および Unicode ドメインの場合もこれを返します —— Unicode ドメインは先に punycode(xn--…)へ変換してください。 |
| 400 | input_too_long | パラメータが 320 文字を超えました。これは実在するアドレスが取り得る最大長です。 |
レート制限・キャッシュ・安定性
IP アドレスごとに 10 秒あたり 17 リクエスト。この API の内部ではなく、Cloudflare のエッジで適用されます。上限を引き上げるキーはなく、有料プランもありません —— これを超える量が必要な場合は、全量リストをダウンロードしてローカルで引いてください。
これを超えると Cloudflare がエッジでリクエストを遮断し、この API には届きません:429、Retry-After: 10、そして短い text/plain の本文 —— 上に示した JSON の形ではありません。想定しておくべき帰結が 2 つあります。遮断レスポンスは Access-Control-Allow-Origin を**持たない**ので、ブラウザからは読み取れる 429 ではなく不透明なネットワークエラーとして見えます。そしてリクエストがここに到達しないため、分岐に使える code フィールドもありません。バースト直後に即座に失敗したリクエストは、レート制限として扱ってください。
レスポンスは 1 日キャッシュ可能で(s-maxage=86400)、上流ファイルのハッシュから導いた ETag を持つので、データが変わらないあいだの条件付きリクエストはほぼ無償です。リストはビルド時にコンパイルされるため、次のデプロイまで答えは変わりません。知っておく価値のある帰結が 1 つ:キャッシュに当たったリクエストはレートリミッタに届かないので、この上限はトラフィックを整えるものであって、保証ではありません。
すべてのレスポンスが Access-Control-Allow-Origin: * を返すので、ブラウザから登録フォーム内で直接呼べます。プロキシは要りません。
v1 が約束するのは形であって、データではありません:パスに新しいバージョン区間が入らないかぎり、フィールドが削除・改名されることも、ステータスコードの意味が変わることもありません。判定そのものは、上流リストが変われば変わります。
コード例
どの例も真偽値ではなく verdict で分岐しています。実際に下したい判断はそちらだからです。
curl "https://moemail.app/api/tools/v1/disposable-email/check?domain=mailinator.com"
# {"domain":"mailinator.com","disposable":true,"verdict":"high"}
curl "https://moemail.app/api/tools/v1/disposable-email/dataset"
# {"high":8742,"medium":66885,"total":75627,"builtAt":"…","status":"upstream",…}const ENDPOINT = "https://moemail.app/api/tools/v1/disposable-email/check"
async function verdictFor(domain) {
const res = await fetch(`${ENDPOINT}?domain=${encodeURIComponent(domain)}`)
const body = await res.json()
if (!res.ok) throw new Error(body.code) // branch on `code`, never on `error`
return body.verdict
}
// "medium" means "only in the broad aggregator list" — a signal, not a verdict.
// Gate signups on the tier you are willing to defend to a real user.
const verdict = await verdictFor("mailinator.com")
const reject = verdict === "high" || verdict === "ours"import requests
ENDPOINT = "https://moemail.app/api/tools/v1/disposable-email/check"
def verdict_for(domain: str) -> str:
r = requests.get(ENDPOINT, params={"domain": domain}, timeout=5)
r.raise_for_status()
return r.json()["verdict"]
# Note: use requests (or set an explicit User-Agent). Cloudflare's managed bot
# rules block the default "Python-urllib/3.x" agent with a 403 before the
# request ever reaches this API.
if verdict_for("mailinator.com") in ("high", "ours"):
... # reject the signup<?php
function verdict_for(string $domain): string {
$url = 'https://moemail.app/api/tools/v1/disposable-email/check?domain=' . urlencode($domain);
$ctx = stream_context_create(['http' => [
'timeout' => 5,
// Send a real User-Agent: identify your app, and stay clear of any
// bot rule that keys on a default library agent.
'header' => "User-Agent: my-app/1.0\r\n",
]]);
$body = json_decode(file_get_contents($url, false, $ctx), true);
return $body['verdict'];
}
if (in_array(verdict_for('mailinator.com'), ['high', 'ours'], true)) {
// reject the signup
}export default {
async fetch(request) {
const email = new URL(request.url).searchParams.get("email") ?? ""
const domain = email.split("@").pop()
// Responses are cacheable (s-maxage=86400), so the Cache API turns a
// repeated lookup into zero subrequests.
const res = await fetch(
`https://moemail.app/api/tools/v1/disposable-email/check?domain=${encodeURIComponent(domain)}`,
{ cf: { cacheTtl: 86400, cacheEverything: true } },
)
const { verdict } = await res.json()
return Response.json({ allow: verdict !== "high" && verdict !== "ours" })
},
}これらのリストは公開された上流データから構築されており、その一部のライセンスは表示をデータとともに引き継ぐことを求めています。そのため全レスポンスに上のクレジット一覧を指す Link: rel="license" ヘッダを付け、ライセンス全文はダウンロード可能なデータセットのヘッダに同梱しています。
他の無料判定 API との比較
キー不要で無料の使い捨てドメイン判定は、いくつか存在します。以下はこの API が違う点 —— そして、できることが少ない点です。
| 項目 | MoeMail | Kickbox Open | DeBounce Free | validator.pizza |
|---|---|---|---|---|
| API キー・登録が不要 | あり | あり | あり | あり |
| ブラウザから直接呼べる(CORS) | あり | なし | あり | あり |
| 確度の粒度 | 2 層、さらに自社ドメイン | 真偽値ひとつ | 真偽値ひとつ、ただし文字列で返る | 真偽値ひとつ |
| データ源を明示し、チェックサムも公開 | あり | なし | なし | なし |
| 全量リストをダウンロード可能 | あり | なし | なし | なし |
| データのバージョンを問い合わせ可能 | あり | なし | なし | なし |
| MX / ドメイン年齢のリアルタイム参照 | なし | なし | なし | あり |
| 明示されたレート制限 | 10 秒あたり 17、ドキュメントあり | 明示なし | 明示なし | x-ratelimit-limit: 1 |
表の各セルは 2026-08-22 に実際に各エンドポイントを呼んで確認しました。リクエストの形は上の cURL 例と同じなので、ご自身で再実行できます。ベンダーの宣伝ページから採ったものは 1 つもありません:Kickbox のエンドポイントは CORS に対応しているという検索結果がありましたが、実際には対応していません。
4 つはいずれもブロックリスト参照です。答えるのは「このドメインが使い捨てとして知られているか」だけで、それ以上ではありません。この API を含め、どれもメールボックスが実在するかは判定できません。validator.pizza が最も踏み込んでおり、MX レコードとドメイン年齢をリアルタイムに解決します —— それが必要なら、そちらを使ってください。
有料の検証サービス —— ZeroBounce、Kickbox 自身の検証 API、Bouncer —— は、ここにあるどれよりもはるかに多くのことを行い(メールボックスの実在確認、catch-all 検出など)、1 件ごとに課金します。表に入れていないのは、無料のブロックリストが自分で選んだ軸で測るのは不公平な比較になるからです。