SPF、DKIM、DMARC 設定教學:記錄範例、常見錯誤與檢查方法
如果您使用自己的網域寄送郵件,SPF、DKIM 和 DMARC 的設定已經不再是可有可無的選項。請依以下順序進行:發布一筆 SPF 記錄,以 2048 位元金鑰啟用 DKIM 簽章,再發布一筆從 p=none 開始、並啟用報告的 DMARC 記錄。同時也請確認寄出郵件的 IP 位址設有相符的反向 DNS(PTR)。
無論您是透過共享主機、自己的 VPS、Google Workspace、Microsoft 365 或大量郵件寄送服務寄信,本教學都適用。內容包括可依需求修改的記錄範例、最常導致驗證失敗的錯誤,以及如何從實際郵件的標頭確認一切運作正常。
以下內容已於 2026 年 11 月對照 RFC 及 Google、Yahoo、Microsoft 的官方頁面確認。郵件服務業者的規定會變更,請以各業者的頁面為最終依據。
SPF、DKIM、DMARC 各自證明什麼,以及設定順序
SPF(Sender Policy Framework)讓網域在 DNS 中列出哪些伺服器可以代表它寄信。收件伺服器會查看信封寄件者(SMTP 的 MAIL FROM 地址,之後會顯示為 Return-Path),取得該網域的 SPF 記錄,再檢查連線過來的 IP 位址是否在清單中。單靠 SPF,無法證明讀者看到的 From 地址是否可信。
DKIM(DomainKeys Identified Mail)會在每封郵件加上加密簽章。寄件系統以私密金鑰簽署,收件端再用發布在 DNS 上的公開金鑰驗證簽章。有效的簽章可證明簽署網域(d= 的值)為該郵件負責,而且已簽署的標頭與內文在傳送途中沒有遭到竄改。
DMARC(Domain-based Message Authentication, Reporting and Conformance)將上述兩者與讀者看得到的 From 網域連結起來。只有在 SPF 或 DKIM 通過,而且通過驗證的網域與 From 網域對齊(alignment)時,郵件才算通過 DMARC。DMARC 記錄也會告訴收件端,您希望如何處理驗證失敗的郵件(不處理、隔離或拒收),以及要將彙總報告寄到哪裡;透過這些報告,就能找出您遺漏的寄件來源。
| 機制 | 記錄的位置 | 檢查的內容 |
|---|---|---|
| SPF | example.com 的 TXT | 寄件 IP 與 MAIL FROM 網域 |
| DKIM | selector._domainkey.example.com 的 TXT(或 CNAME) | 簽章與 d= 網域 |
| DMARC | _dmarc.example.com 的 TXT | 與 From 網域的對齊,以及政策與報告 |
設定順序
- 列出所有以您的網域名義寄信的系統:自己的伺服器、Google Workspace 或 Microsoft 365、電子報與交易郵件服務、網站表單、請款與客服工具。
- 發布一筆涵蓋所有寄件來源的 SPF 記錄。
- 在每個寄件系統上啟用 DKIM,並發布其公開金鑰。
- 發布
p=none並設有rua報告地址的 DMARC。Google 建議在設定 SPF 和 DKIM 後等待 48 小時,再加入 DMARC。 - 閱讀報告、修正驗證失敗的來源,然後改為
p=quarantine,最後再改為p=reject。
SPF 設定:一筆記錄、十次查詢
SPF 是設在網域本身的 TXT 記錄。以下範例是一個從自有伺服器透過 IPv4 和 IPv6 寄信,同時也使用 Google Workspace 的網域:
example.com. 3600 IN TXT "v=spf1 ip4:203.0.113.10 ip6:2001:db8::10 include:_spf.google.com ~all"
在多數 DNS 控制台中,主機欄位留空(或輸入 @),類型選擇 TXT,再貼上從 v=spf1 開始的值。常用的組成元素如下:
| 寄件來源 | 要加入的內容 |
|---|---|
| 自己的 VPS 或郵件伺服器 | ip4:203.0.113.10 和/或 ip6:2001:db8::10 |
| Google Workspace | include:_spf.google.com |
| Microsoft 365 | include:spf.protection.outlook.com |
| 共享主機或郵件服務 | 業者文件中提供的 include: 或 IP 範圍 |
SPF 的常見陷阱
- 每個名稱只能有一筆 SPF 記錄。RFC 7208 禁止同一網域有多筆 SPF 記錄;收件端會回傳
permerror,所有郵件的 SPF 都會失敗。新增服務時,請編輯現有記錄並加上該服務的include:,而不是另外建立第二筆v=spf1記錄。 - 10 次查詢上限。
include、a、mx、ptr、exists機制以及redirect修飾詞都會觸發 DNS 查詢,整個評估過程中的查詢總數(包括巢狀 include 內的查詢)不得超過 10 次。超過上限會得到permerror。ip4:、ip6:和all不會計入。RFC 7208 也指出,收件端在兩次查詢沒有回應後應停止評估,因此請移除已不再使用之服務的 include。 ~all與-all的差異。-all表示未列出的來源不獲授權(fail);~all表示這些來源可能未獲授權(softfail)。Google 建議 Workspace 網域使用~all;Microsoft 則建議同時使用 DKIM 和 DMARC 的 Microsoft 365 網域使用-all。如果還不確定是否已找出所有寄件來源,請先使用~all,把強制執行交給 DMARC。- 子網域需要各自的記錄。
example.com的 SPF 記錄並不涵蓋news.example.com。把大量郵件寄送服務放在獨立的子網域上,也能讓它擁有另一份 10 次查詢的額度,並使其信譽與員工的日常郵件分開。 - 語法錯誤。Microsoft 列出了常見的錯誤:把
include:寫成include=、冒號後面多了空格,以及 include 的網域結尾多了一個點。
對於從不寄信的網域,請發布 v=spf1 -all,讓它更難被冒用。
DKIM 設定:2048 位元金鑰與選取器
DKIM 分為兩部分:寄件系統以私密金鑰簽署,DNS 則發布對應的公開金鑰。在 Google Workspace、Microsoft 365、多數主機控制台以及多數郵件服務中,您只要在管理主控台產生金鑰,再複製畫面上顯示的 DNS 值即可。
金鑰長度與選取器
請使用 2048 位元的 RSA 金鑰。RFC 8301 將 1024 位元定為下限,並指出簽署者應使用至少 2048 位元的金鑰;同時也禁止使用 rsa-sha1。Google 的建議也相同:如果 DNS 代管業者支援,請選擇 2048 位元,只有在不支援時才退而使用 1024 位元。
選取器(selector)是用來識別郵件由哪一把金鑰簽署的標籤,因此一個網域可以同時擁有多把金鑰,例如每個寄件服務各一把,或每個輪替週期各一把。公開金鑰位於 selector._domainkey.yourdomain。Google Workspace 的預設選取器是 google。Microsoft 365 使用 selector1._domainkey 和 selector2._domainkey 兩筆 CNAME 記錄,指向由 Microsoft 代管的金鑰;由於格式因租用戶而異,請從 Defender 入口網站或 Get-DkimSigningConfig 取得確切的指向目標。
發布較長的公開金鑰
2048 位元的公開金鑰超過單一 DNS 字串所允許的 255 個字元,因此在區域檔(zone file)中,會在同一筆 TXT 記錄內寫成多段加上引號的字串:
selector1._domainkey.example.com. 3600 IN TXT ( "v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA(first part of your key)"
"(rest of your key)IDAQAB" )請將括號內的部分換成您實際的金鑰。收件端會把各段字串直接串接,中間不加空格,所以可以在金鑰中的任何位置分段。許多控制台會自動分段長字串:請先貼上完整的值,只有在控制台不接受時才自行分段。請確認複製時沒有遺漏任何內容;p= 為空值代表該金鑰已被撤銷。
在執行 Postfix 或類似 MTA 的自有 VPS 上,可以用 OpenDKIM 等簽章用 milter 產生金鑰組,例如 opendkim-genkey -b 2048 -s selector1 -d example.com。再依上述方式發布產生的公開金鑰檔案內容。
確認郵件確實已簽署
打開一封您寄出的郵件,尋找 DKIM-Signature: 標頭。其中的 d= 標籤應為您的網域,s= 則應為您發布的選取器。許多郵件服務預設會以自己的網域簽署;這樣雖然能通過 DKIM,但無法與您的 From 網域對齊,因此對 DMARC 沒有幫助。請開啟該服務的自訂網域驗證功能,讓 d= 變成您的網域。
DMARC 設定:從 p=none 開始,再逐步強制執行
DMARC 是設在您網域下 _dmarc 的 TXT 記錄。請從監控模式開始,也就是請收件端不要改變處理您郵件的方式,同時要求寄送彙總報告:
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
彙總報告是機器可讀的摘要,記錄了哪些 IP 位址以您的網域名義寄信,以及是否通過驗證;Google 建議使用專用的信箱或群組來接收。當報告顯示所有合法來源都能在對齊的情況下通過時,請編輯同一筆記錄來收緊政策,而不是另外新增第二筆:
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"
| 標籤 | 意義 |
|---|---|
v=DMARC1 | 必要,且必須放在最前面 |
p= | none(不採取動作)、quarantine(視為可疑,例如放入垃圾郵件資料夾)或 reject |
sp= | 子網域的政策;若未設定,子網域會沿用 p= |
rua= | 彙總報告的寄送地址;未設定就不會收到報告 |
adkim= / aspf= | DKIM 與 SPF 的對齊模式:r 寬鬆(預設)或 s 嚴格 |
簡單說明對齊
要通過 DMARC,SPF 或 DKIM 至少要有一項針對與 From 網域相符的網域通過驗證。在寬鬆模式下,只要組織網域相符即可,因此 d=example.com 的 DKIM 簽章可以與來自 alerts@news.example.com 的郵件對齊。嚴格模式則要求完全一致。郵件服務常在 Return-Path 中使用自己的網域,所以即使 SPF 通過也不會對齊;對這類郵件而言,讓 DKIM 對齊才是通過 DMARC 的實際做法。
如果想為子網域設定不同的政策,請加上 sp=。例如 p=reject; sp=quarantine 會拒收主網域驗證失敗的郵件,而子網域驗證失敗的郵件只會被隔離。
關於標準的更新
2026 年 5 月,DMARC 以 RFC 9989 重新發布,取代了 RFC 7489。現有的記錄仍可繼續使用,開頭也仍是 v=DMARC1。新標準刪除了 pct 標籤(除了 0 或 100 以外,這個標籤很少被準確套用),並新增了 t=y(測試模式)和 np(不存在之子網域的政策)等標籤。部分業者的說明頁面仍會出現 pct,因此逐步調整 p= 的值,是導入強制執行時最不易產生誤解的方式。
寄件 IP 的反向 DNS(PTR)
反向 DNS 會將 IP 位址對應回主機名稱。Google 要求所有寄信到 Gmail 個人帳戶的寄件者,都必須有 PTR 記錄,且其主機名稱能解析回同一個寄件 IP;Yahoo 則要求寄件 IP 有有效的正向與反向 DNS,並建議使用有意義、非通用格式的 PTR 記錄。
203.0.113.10 PTR mail.example.com. mail.example.com. A 203.0.113.10
PTR 記錄並不在您網域的區域中,而是由擁有該 IP 位址的一方管理。因此在 VPS 上,您需要在供應商的控制台中設定(通常稱為反向 DNS 或 rDNS),再於自己的 DNS 中建立相符的 A 記錄(IPv6 則為 AAAA)。如果透過 IPv6 寄信,IPv6 位址也需要相同的設定。若使用 Google Workspace、Microsoft 365、郵件服務或大多數共享主機,寄件 IP 及其反向 DNS 會由業者代為管理。
如何驗證設定是否正確
查看 Authentication-Results
寄一封測試郵件到外部信箱,然後查看完整標頭。在 Gmail 中,打開郵件並選擇「顯示原始郵件」。Google 的 DKIM 說明指出,測試時應寄給其他使用者,而不是寄給自己。請尋找類似以下的標頭:
Authentication-Results: mx.example.net;
dkim=pass header.i=@example.com header.s=selector1;
spf=pass smtp.mailfrom=example.com;
dmarc=pass header.from=example.com實際的格式依收件端而異。重點是要有 spf=pass、dkim=pass 和 dmarc=pass,而且 header.i 或 header.d 以及 header.from 中都是您自己的網域。如果 SPF 以服務業者的網域通過,而 DKIM 顯示的是另一個網域,DMARC 就會失敗:請先修正 DKIM 的對齊。
直接查詢 DNS
dig +short TXT example.com dig +short TXT selector1._domainkey.example.com dig +short TXT _dmarc.example.com dig +short -x 203.0.113.10
在 Windows 上,nslookup -type=TXT _dmarc.example.com 可以達到相同的效果。DNS 變更可能需要一段時間才會生效;Google 表示 SPF 和 DKIM 各自最多可能需要 48 小時才會開始運作。免費的線上檢查工具也能解析您的記錄,並幫您計算 SPF 的查詢次數。
如果驗證都通過,郵件卻仍被退回或進入垃圾郵件,請用本站的黑名單檢查工具確認您的寄件 IP 或網域是否被列入 DNSBL,並參閱〈因黑名單導致郵件無法送達〉了解後續步驟。
Gmail、Yahoo 和 Outlook.com 的寄件者規定
各大郵件服務業者現在都會強制要求驗證。截至 2026 年 11 月,其官方頁面的說明如下。
- Gmail(自 2024 年 2 月 1 日起生效):所有寄信到個人 Gmail 帳戶的寄件者,都需要 SPF 或 DKIM、相符的正向與反向 DNS、TLS 連線,以及 Postmaster Tools 中低於 0.3% 的垃圾郵件比率。每天寄送超過 5,000 封郵件的寄件者,還需要同時設定 SPF 和 DKIM、DMARC 記錄(
p=none也可以)、與 SPF 或 DKIM 對齊的 From 網域,以及行銷郵件的一鍵取消訂閱。DKIM 金鑰至少須為 1024 位元,建議使用 2048 位元。 - Yahoo(自 2024 年 2 月起實施):所有寄件者都需要 SPF 或 DKIM、有效的正向與反向 DNS,以及低於 0.3% 的垃圾郵件比率。大量寄件者需要同時設定 SPF 和 DKIM、可通過驗證且至少為
p=none的 DMARC 政策、From 對齊(寬鬆模式即可)、可正常運作的一鍵取消訂閱,以及寄件 IP 有效的正向與反向 DNS。 - Outlook.com(outlook.com、hotmail.com 和 live.com 背後的個人用服務):每天寄送超過 5,000 封郵件的網域,必須通過 SPF 和 DKIM,並發布至少為
p=none、與 SPF 或 DKIM 對齊的 DMARC。Microsoft 表示,自 2025 年 5 月 5 日起,不符規定的郵件將以550; 5.7.515錯誤拒收。
完整內容請參閱 Google 的寄件者規範、Yahoo 的寄件者最佳做法以及 Microsoft 的 Outlook.com 公告。即使您的寄送量遠低於門檻,現在就完成三項設定,日後門檻降低時也不會措手不及。Gmail 特有的問題排解,請參閱〈Gmail 無法送達您的郵件〉。
常見錯誤
- 第二筆 SPF 記錄。每新增一項服務就新增一筆
v=spf1記錄,會讓整個網域的 SPF 失效。請將所有內容合併成一筆。 - include 太多。留在 SPF 中的舊服務會占用 10 次查詢的額度。請移除不再使用的服務,並將大量郵件移到子網域。
- 已發布金鑰,卻沒有啟用簽章。在 Google Workspace 中,DNS 記錄生效後仍須點選「開始驗證」;其他平台也有類似的開關。
- 服務以自己的網域簽署。SPF 和 DKIM 都通過,DMARC 卻失敗。請啟用自訂網域簽署。
- 直接跳到
p=reject。被遺忘的網站表單或請款系統會在一夜之間無法送達郵件。請從p=none開始,並閱讀報告。 - 複製貼上造成的損壞。值中多了引號、金鑰被截斷,或因為控制台會自動附加網域,導致主機名稱變成
_dmarc.example.com.example.com。用dig快速查詢一下,就能發現上述所有問題。
常見問題
三項都需要,還是只設定一項就夠了?
Gmail 和 Yahoo 對寄送量少的寄件者接受 SPF 或 DKIM 其中一項,但大量寄件者三項都需要。只有 DMARC 能保護收件者實際看到的 From 地址,因此即使寄送量不多,也請三項都設定。
SPF 應該用 ~all 還是 -all?
Google 建議使用 ~all;Microsoft 則建議同時使用 DKIM 和 DMARC 的網域使用 -all。請先使用 ~all,等 DMARC 報告確認已找出所有寄件來源後,再決定是否切換。
DMARC 一直維持 p=none 可以嗎?
這樣可以符合 Gmail、Yahoo 和 Outlook.com 對大量寄件者的規定,但它要求收件端不採取任何動作,因此無法阻止冒名寄信。請把 p=none 當作監控階段,等報告沒有問題後,再改為 quarantine,最後改為 reject。
DNS 代管業者不接受 2048 位元的 DKIM 金鑰,該怎麼辦?
請在同一筆 TXT 記錄中,將金鑰分成多段加上引號的字串;收件端會將它們串接起來,中間不加空格。請查閱 DNS 代管業者的說明,確認其 TXT 長度限制。只有在業者完全無法儲存 2048 位元金鑰時,才使用 1024 位元的金鑰。
驗證全部通過,郵件卻還是進垃圾郵件,為什麼?
驗證只是入場券,並不保證郵件會進入收件匣。寄件者信譽、檢舉比率和黑名單列入狀況仍然很重要。如果您被 Spamhaus 列入,請參閱〈如何從 Spamhaus 黑名單移除〉。
參考的官方頁面
本文內容已於發布時對照下列官方頁面確認。各項政策與運作方式可能未經通知即變更,涉及重要決定前,請先查閱官方頁面。
- RFC 7208: Sender Policy Framework (SPF)
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures
- RFC 8301: Cryptographic Algorithm and Key Usage Update to DKIM
- RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC)
- RFC 9989: DMARC (obsoletes RFC 7489)
- Google: Email sender guidelines
- Google Workspace: Set up SPF
- Google Workspace: Set up DKIM
- Google Workspace: Set up DMARC
- Yahoo Sender Hub: Sender Best Practices
- Microsoft Community Hub: Outlook's New Requirements for High-Volume Senders
- Microsoft Learn: Set up SPF for your Microsoft 365 domain
- Microsoft Learn: How to use DKIM for email in your custom domain
相關文章
說明 Gmail 封鎖郵件或將郵件歸入垃圾郵件的原因、550 5.7.26 等退信代碼的意思,以及自己的 Gmail 收不到信時該如何處理。
郵件被黑名單擋下了嗎?教您看懂退信代碼、依正確順序排查原因、判斷哪些黑名單需要處理,並以正確方式申請移除。
被 Spamhaus 列入了嗎?了解您被列入的是哪個清單(ZEN、PBL、XBL、CSS、SBL、DBL)、回傳代碼的意義,以及各清單正確的移除方式。