連結、網站與郵件
這封郵件是真的嗎?
涵蓋範圍: 適用於任何國家、任何語言的電子郵件:它會讀取你自己的供應商(Gmail、Outlook、Yahoo、iCloud 等)收信時記錄在郵件標頭中的 SPF、DKIM 和 DMARC 檢查結果,並依 NoCall 針對本站的品牌規則檢查寄件者的名稱和網域。
開啟工具本頁內容
用途
貼上可疑郵件的郵件標頭,檢查你自己的郵件服務供應商是否驗證了寄件者(SPF、DKIM 和 DMARC)、名稱是否冒充某個品牌,以及回覆實際會寄到哪裡。
使用要求
任何 NoCall 帳號都可以閱讀這些指南。部分工具需要 Pro,各指南會註明。
電子郵件的「寄件者」可以顯示任何名字。比較難偽造的,是你的郵件服務供應商收信時做的檢查。把郵件標頭貼在這裡,我們會告訴你寄件者是否真如其所稱。內容不會被傳送或儲存。
使用步驟
Gmail:打開郵件,點選三個點圖示,選擇「顯示原始郵件」。複製所有文字。
Outlook:打開郵件,依序點選三個點圖示、「檢視」,以及「檢視訊息來源」(View message source)或「訊息詳細資料」(Message details)。
Apple Mail(郵件):打開郵件,依序選擇「顯示方式」、「郵件」和「原始碼」(Raw Source)。
Yahoo Mail:打開郵件,依序點選「更多」(More)和「檢視原始郵件」(View raw message)。
檢查寄件者
虛構範例
此範例為虛構內容,並非真實查詢。請勿撥打電話或開啟其中的連結。
From: "Bank" <[email protected]>理解結果
不要相信這封郵件: 你的供應商無法確認寄件者,或這封郵件冒充了某個品牌。不要點選連結、不要下載附件,也不要回覆。如果它自稱來自某家公司,請自己輸入網址前往其官網或應用程式。
仔細檢查這封郵件: 寄件者已通過驗證,但有些細節值得你在回覆或點選連結前先檢查。
寄件者已通過驗證: 你的郵件服務供應商已確認這封郵件來自「寄件者」中顯示的網域。但這不保證內容是真的:如果它要你提供資料或付款,仍要保持警覺。
限制
在你的瀏覽器中檢查:郵件標頭不會被傳送或儲存,結果只顯示網域,絕不顯示完整地址。
疑難排解
我們在文字中找不到郵件標頭。請複製完整的原始郵件,而不只是內文。
郵件標頭中沒有寄件者(From)。請複製完整的原始郵件。
郵件標頭太長,無法檢查(最多 64 KB)。
透過 API 使用
需要 API 金鑰和點數。每次完成的呼叫扣 1 點,即使沒有資料也一樣。有效的 Pro 帳戶每個 UTC 曆月包含 20 點,由所有 API 路由共用並優先扣用;當月未使用的點數不會累積到下個月。在帳戶頁面購買的點數不需 Pro 即可使用,且永不過期。
錯誤一律不扣點:401 invalid_api_key(缺少金鑰或金鑰無效)、403 pro_required(沒有 Pro 點數,也沒有購買的點數)、422 輸入無效、429 quota_exceeded(點數用完)、rate_limit_exceeded 或 ai_busy(sms-check 的 AI 已達負載上限)、503 tool_warming(資料仍在準備中)或 tool 或供應商無法使用。收到 429 或 503 後,請等 Retry-After 標頭中的秒數過後再重試。
接收端供應商是否驗證了這封郵件(取自最上方 Authentication-Results 的 SPF、DKIM 和 DMARC),以及寄件者方面的跡象:顯示名稱中的品牌、免費信箱或相似網域、回覆寄往其他網域。只傳回網域;不儲存任何內容。
將 JSON 主體傳送到該 tool 專屬的路由,或加上 tool 欄位後傳送到 POST /v2/tools。兩種路由回傳的結果相同。
POST https://api.nocall.io/v2/email-headers
POST https://api.nocall.io/v2/tools {"tool":"email-headers","headers":"Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: \"Bank Alerts\" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>","country":"ES"}參數
| 名稱 | 類型 | 必填 | 說明 |
|---|---|---|---|
| headers | string (1–65536) | 是 | 郵件的原始標頭(「顯示原始郵件」),最多 64 KB;第一個空白行之後的內容會被忽略。 |
| country | string (enum, 55) | 否 (預設: "ES") | 要使用哪個國家的 SMS 規則集。 |
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/email-headers' \
--header "Authorization: Bearer $NOCALL_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $REQUEST_ID" \
--data '{"headers":"Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: \"Bank Alerts\" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>","country":"ES"}'import json
import os
import urllib.request
import uuid
api_key = os.environ.get('NOCALL_API_KEY')
if not api_key:
raise SystemExit('Set NOCALL_API_KEY')
request = urllib.request.Request(
'https://api.nocall.io/v2/email-headers',
method='POST',
data=json.dumps({'headers': 'Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: "Bank Alerts" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>', 'country': 'ES'}).encode(),
headers={
'Authorization': 'Bearer ' + api_key,
'Content-Type': 'application/json',
'Idempotency-Key': str(uuid.uuid4()),
},
)
with urllib.request.urlopen(request, timeout=30) as response:
result = json.load(response)
print(result['data']['result'], result['meta']['unitsCharged'])import { randomUUID } from 'node:crypto';
const requestId = randomUUID();
const apiKey = process.env.NOCALL_API_KEY;
if (!apiKey) throw new Error('Set NOCALL_API_KEY');
const response = await fetch('https://api.nocall.io/v2/email-headers', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + apiKey,
'Content-Type': 'application/json',
'Idempotency-Key': requestId,
},
body: JSON.stringify({ headers: 'Delivered-To: [email protected]\nReceived: from mail.bank.example (mail.bank.example [192.0.2.10]) by mx.google.com with ESMTPS id x1 for <[email protected]>; Tue, 27 Oct 2026 09:00:00 -0700\nAuthentication-Results: mx.google.com; dkim=pass [email protected] header.s=s1; spf=pass (google.com: domain of [email protected] designates 192.0.2.10 as permitted sender) [email protected]; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bank.example\nFrom: "Bank Alerts" <[email protected]>\nReply-To: [email protected]\nSubject: Your statement is ready\nMessage-ID: <[email protected]>', country: 'ES' }),
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.code ?? 'request_failed');
console.log(result.data.result, result.meta.unitsCharged);回應範例(200)
這是 API 參考文件中的範例。查詢使用虛構號碼,彙總資料和 AI 回答只呈現結果的結構,並非即時資料。
{
"data": {
"tool": "email-headers",
"result": {
"fromDomain": "bank.example",
"fromDomainAscii": "bank.example",
"displayName": "Bank Alerts",
"replyToDomain": "other.example",
"returnPathDomain": null,
"senderDomain": null,
"subject": "Your statement is ready",
"auth": {
"provider": "mx.google.com",
"source": "authentication_results",
"spf": "pass",
"spfDomain": "bank.example",
"dkim": "pass",
"dkimDomains": [
"bank.example"
],
"dmarc": "pass",
"dmarcDomain": "bank.example",
"compauth": null,
"aligned": true
},
"authenticated": true,
"brand": null,
"official": false,
"freeMail": false,
"signals": [
"reply_to_mismatch"
],
"attention": true
}
},
"meta": {
"requestId": "req_example",
"unitsCharged": 1,
"usage": {
"periodStart": "2026-10-01",
"unitLimit": 20,
"unitsUsed": 3,
"unitsRemaining": 17
}
}
}結果欄位(data.result)
| 欄位 | 類型 | 說明 |
|---|---|---|
| fromDomain | string | Unicode 形式的 From 網域;絕不傳回完整地址。 |
| fromDomainAscii | string | 郵件系統所見的 From 網域(punycode)。 |
| displayName | string | null | 顯示名稱,其中的電子郵件本地部分和 IP 位址會替換為 …,或 null。 |
| replyToDomain | string | null | 回覆寄往的網域,或 null。 |
| returnPathDomain | string | null | 傳遞通知寄往的網域,或 null。 |
| senderDomain | string | null | Sender 欄位的網域,或 null。 |
| subject | string | null | 解碼後的主旨,其中的本地部分和 IP 位址會替換為 …,或 null。 |
| auth | object | 供應商的結果:provider、source、spf、dkim 和 dmarc(pass、fail、softfail、neutral、none、temperror、permerror 或 policy)及其網域、compauth,以及它們是否與 From 網域對齊。 |
| authenticated | boolean | 供應商是否驗證郵件來自 From 網域(DMARC pass,或對齊的 DKIM pass)。 |
| brand | string | null | 顯示名稱或主旨中提到的品牌,或 null。 |
| official | boolean | 主機是否為品牌或政府的官方網域。 |
| freeMail | boolean | From 網域是否為任何人都能申請的免費電子郵件服務。 |
| signals | array<string (enum, 15)> | no_auth_results、dmarc_fail、dmarc_none、spf_fail、dkim_fail、dkim_unaligned、return_path_mismatch、reply_to_mismatch、display_name_brand、display_name_address、free_mail_brand、lookalike_domain、suspicious_domain、risky_tld 或 multiple_from。 |
| attention | boolean | 內容是否值得進一步查看。 |
常見問題
SPF、DKIM 和 DMARC 是什麼?
它們是你的郵件服務供應商收到郵件時進行的檢查:SPF 檢查寄信伺服器是否獲得授權,DKIM 驗證來自該網域的簽章,DMARC 確認這一切與你在「寄件者」中看到的網域相符。如果 DMARC 未通過,寄件者就是假的。
寄件者通過驗證,郵件就安全嗎?
不一定。通過驗證代表郵件來自那個網域,但詐騙者可以使用自己註冊、看起來像某個品牌的網域,或是被盜的帳號。也要看清楚顯示的網域,並對任何索取資料或付款的要求保持警覺。
為什麼只看寄件者名稱不夠?
因為顯示名稱是寄件的人自己填的,可以寫成任何內容,甚至是你銀行的名稱,或加上引號的假地址。真正重要的是經過驗證的網域。
