一次性信箱檢測
輸入一個網域,看它是否屬於一次性信箱服務商。免費、免註冊 —— 我們連自己的網域也一起標出來。
20 個常見網域的現成結論
表格裡的結論由檢測器所用的同一份資料生成,因此永遠不可能和檢測結果不一致。說明欄講的是「這是什麼服務」,結論欄講的是「封鎖清單怎麼說它」。
| 網域 | 結論 | 這是什麼 |
|---|---|---|
| gmail.com | 未被列為一次性信箱 | Google 的個人信箱服務。 |
| outlook.com | 未被列為一次性信箱 | 微軟的個人信箱服務。 |
| yahoo.com | 未被列為一次性信箱 | Yahoo 信箱。 |
| icloud.com | 未被列為一次性信箱 | Apple 的信箱服務,綁定 Apple 帳號。 |
| proton.me | 未被列為一次性信箱 | 注重隱私的信箱服務商,有免費與付費方案。 |
| qq.com | 未被列為一次性信箱 | 騰訊 QQ 信箱,中國使用最廣的信箱之一。 |
| 163.com | 未被列為一次性信箱 | 網易信箱,在中國使用廣泛。 |
| 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 | 這是我們自己的網域 | 就是本站。一次性信箱服務商 —— 見下方說明。 |
為什麼給兩級,而不是「是」或「否」
多數免費檢測器只回答 true 或 false,這恰好隱藏了你真正需要知道的事:這個答案有多確定。我們使用兩份審核標準不同的清單,並告訴你命中的是哪一份。
已列入
網域在嚴格審核的封鎖清單裡,條目經過人工複核,誤判很少。如果你要做自動封鎖或標記,這一級才是可以直接行動的依據。
可能
只在涵蓋更廣的那份清單裡,那份清單犧牲精確度換取涵蓋率。適合作為多個訊號中的一個。只憑這一級就封鎖,偶爾會誤傷真實使用者。
未列入
兩份都沒有。請注意它代表什麼、不代表什麼:沒有任何封鎖清單是完整的,一個全新的一次性網域會在一段時間內一直通過這項檢測。
封鎖清單命中是證據,不是鐵證。任何有實際後果的判斷,都該結合你自己掌握的訊號 —— MX 記錄、網域註冊時間、帳號行為,或者一封確認信。
別名服務和一次性信箱不是同一件事
SimpleLogin、DuckDuckGo Email Protection,以及 Gmail 自帶的加號地址,給你的是一個轉寄到你長期收件匣的地址。地址是可丟棄的,後面的收件匣不是。使用者照樣會讀信、照樣會回覆、日後照樣能找回帳號。
各家封鎖清單對它們的處理並不一致,所以你可能會看到某個別名網域被標記。這一點在你決定封鎖之前值得知道:擋掉別名使用者,趕走的是注重隱私但完全真實的客戶。一次性收件匣幾分鐘後就被丟棄,而別名可能比它服務的那個帳號活得更久。
資料本身就有自相矛盾的地方,值得一看。`addy.io` 被列入了,而同一家公司的舊網域 `anonaddy.com` 沒有;`relay.firefox.com` 被列入了,但 Firefox Relay 實際發放的別名地址用的是 `mozmail.com`,而後者根本不在清單裡。這兩個標記都落在「可能」這一級、而不是「已列入」—— 這正是那一級存在的意義。
我們把自己的網域也標為一次性
MoeMail 提供的就是一次性信箱服務。我們的網域做的事情和封鎖清單描述的完全一致,所以誠實的答案是:它們本來就該在那些清單上 —— 這個檢測器也照實這麼說。
我們本來可以悄悄把自己排除掉。沒有這麼做,理由很簡單:任何人花五秒鐘就能拿自家網域試出來,而一個被抓到偏袒自己的工具毫無價值。如果你在經營網站、想擋掉一次性註冊,你應該能用這個工具把我們也擋在外面。
網站實際上是怎麼識別一次性信箱的
像這樣的封鎖清單查詢只是第一層。真實系統會疊加好幾道檢查:拿網域去比對公開與商業清單、解析 MX 記錄看它到底收不收信、看網域註冊了多久、以及觀察帳號註冊之後的行為。
這也是為什麼有些地址明明不在任何清單上卻仍被拒絕,而有些一次性地址反而能順利通過。想看更完整的版本,我們另外寫過一篇。
資料來自哪裡
檢測器查詢兩份由社群維護的開源封鎖清單。其中第二份是聚合器,所以下面把餵給它的儲存庫也一併署名,每一個都回連原始出處。我們從上游重新建置自己的副本,而不是手動改條目,所以你在這裡看到的和維護者發布的一致。
- 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
兩份清單都不聲稱自己是最新或完整的,維護者自己也明說了這一點。網域會轉手,服務會關停,新的每天都在出現。請把這裡得到的結果當作社群維護的一份快照,而不是即時權威。
免費一次性信箱檢測 API
這個頁面跑的就是這個查詢,只是換成 JSON 介面。不需要 API key、不需要註冊、沒有配額要儲值 —— 在註冊表單裡呼叫、在 Worker 裡呼叫、在 shell 腳本裡呼叫都可以。它讀的是上面寫明的同兩份清單,所以介面給出的答案和你在這個頁面看到的完全一致。
curl "https://moemail.app/api/tools/v1/disposable-email/check?domain=mailinator.com"端點
https://moemail.app/api/tools/v1/disposable-email/check?domain=…查一個網域,或一個完整信箱地址 —— 地址前半段會被丟棄。回傳正規化後網域的判定結果。
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 個,而它來自一份沒有人手工審核的廣泛聚合清單。把它們全部擋掉,一定會誤傷真實使用者。如果一次誤判會讓你丟掉一個客戶,那就只對 verdict === "high" 做攔截,把 medium 當成「要求二次驗證」的理由,而不是「拒絕」的理由。disposable 這個欄位的存在,是為了讓原本對接布林型介面的程式碼能直接換過來,不是因為布林值是正確的決策邊界。
錯誤
每個錯誤都同時帶一個機器可讀的 code 和一段給人看的 error。請對 code 做分支判斷:文案隨時可能改寫,而這些 code 在 API 版本不變的前提下不會變。
| 400 | missing_domain | 沒有傳 domain 參數,或者傳了空值。 |
| 400 | invalid_domain | 不是一個像樣的網域。domain 被重複傳入時、以及傳入 Unicode 網域時也回傳這個 —— Unicode 網域請先轉成 punycode(xn--…)。 |
| 400 | input_too_long | 參數超過 320 個字元,而這已經是一個真實地址可能達到的最大長度。 |
限流、快取與穩定性
每個 IP 每 10 秒 17 次,由 Cloudflare 在邊緣執行,不是在這個 API 內部。沒有任何 key 能提高這個上限,也沒有付費方案 —— 如果你需要的量超過它,請直接下載全量清單,在本地查。
超過之後,Cloudflare 會在邊緣直接擋掉,請求根本到不了這個 API:429、Retry-After: 10,以及一小段 text/plain 內容 —— 不是上面那個 JSON 結構。有兩個後果需要提前考慮。攔截回應**不帶** Access-Control-Allow-Origin,所以瀏覽器看到的是一個不透明的網路錯誤,而不是一個能讀的 429;而且因為請求從未到達這裡,也就沒有 code 欄位可以分支。請把「突發之後立刻失敗的請求」當作被限流處理。
回應可快取一天(s-maxage=86400),並帶一個由上游檔案雜湊推導出來的 ETag,所以在資料沒變的期間,條件請求幾乎不花任何成本。清單是建置時編譯進去的,因此在下一次部署之前答案不會改變。有一個後果值得知道:命中快取的請求根本到不了限流器,所以這個限額是在塑造流量,而不是在做硬保證。
所有回應都帶 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 的比較
免費、不需要 key 的一次性網域查詢介面有那麼幾個。下面是這一個和它們的差別 —— 也包括它做得更少的地方。
| 比較項 | MoeMail | Kickbox Open | DeBounce Free | validator.pizza |
|---|---|---|---|---|
| 不需要 API key 或註冊 | 是 | 是 | 是 | 是 |
| 瀏覽器可直接呼叫(CORS) | 是 | 否 | 是 | 是 |
| 信賴度粒度 | 兩層,另加自有網域 | 單一布林 | 單一布林,但以字串回傳 | 單一布林 |
| 公開資料來源,並給出檢查碼 | 是 | 否 | 否 | 否 |
| 可下載全量清單 | 是 | 否 | 否 | 否 |
| 資料版本可查詢 | 是 | 否 | 否 | 否 |
| 即時 MX / 網域年齡查詢 | 否 | 否 | 否 | 是 |
| 明示的限流 | 每 10 秒 17 次,有文件 | 未標明 | 未標明 | x-ratelimit-limit: 1 |
表中每一格都是在 2026-08-22 透過實際呼叫對方端點核實的,請求形狀與上面那段 cURL 範例一致 —— 你可以自己重跑。這裡沒有一條取自廠商的宣傳頁面:曾有一條搜尋結果聲稱 Kickbox 那個端點支援 CORS,實際上並不支援。
這四個都是黑名單查詢。它們回答的只是「這個網域是否已知為一次性信箱」,僅此而已;包括本介面在內,沒有一個能告訴你某個信箱是否真實存在。validator.pizza 走得最遠,它會即時解析 MX 記錄和網域年齡 —— 如果你要的是這個,就用它。
付費的信箱驗證服務 —— ZeroBounce、Kickbox 自家的驗證 API、Bouncer —— 做的事比這裡任何一個都多得多,包括信箱是否真實存在、以及 catch-all 偵測,並且按次收費。它們沒有進這張表,因為拿一個免費黑名單自己挑的維度去衡量它們,是一張作弊的表。