「客戶說沒收到我的報價單。」「網站的訂單通知信不見了。」「寄給某某公司的信被退回來。」這幾句話幾乎每個做生意的人都遇過,而多數人的第一反應是「信箱壞了」或「對方擋我」。
實際上,最常見的原因是你的網域沒有向收信方證明「這封信真的是我寄的」。現在的收信伺服器(Gmail、Outlook、各家企業郵件閘道)預設把來路不明的信當可疑處理——因為冒用網域寄詐騙信實在太容易了。這篇用白話講清楚 SPF、DKIM、DMARC 各自在做什麼、最常見的設定錯誤,以及你自己就能先做的檢查。
先理解一件事:收信方憑什麼相信你?
Email 這套協定設計得很早,早到它原本沒有內建「驗證寄件人」的機制。也就是說,任何人都可以在信裡把寄件人寫成你的公司地址寄出去,就像在信封上隨便寫一個寄件地址一樣。
為了補這個洞,後來才加上三道「附加驗證」,全部都設定在你網域的 DNS 裡——因為只有真正握有網域的人才改得動 DNS,這就成了證明身分的方法。收信方收到信,會去查你的 DNS,看這封信合不合規矩。
一句話理解三者的分工
SPF 管「誰可以用我的網域寄信」、DKIM 管「這封信途中有沒有被動過」、DMARC 管「驗不過的時候要怎麼辦」。三個是互補的,不是三選一。
SPF:授權名單
SPF 是一筆寫在 DNS 裡的 TXT 記錄,內容大意是:「以下這些主機,才有資格用我的網域寄信。」收信方拿到信,看一下是從哪台主機送來的,再對照你的 SPF 名單,不在名單上就扣分。
最常見的錯誤有三種:
- 漏掉會寄信的系統:公司除了郵件主機,網站的系統通知信、電子報平台、ERP、客服系統可能都會用同一個網域寄信。SPF 只寫了郵件主機,其他就開始被擋。
- 同一個網域出現兩筆 SPF:規格上只能有一筆。有兩筆時,收信方可能直接判定無效,等於整個 SPF 白設了。要合併成一筆,不是各寫各的。
- 換主機商後忘記更新:搬家後 SPF 還指著舊主機,新主機寄的信自然不在名單上。
DKIM:數位簽章
SPF 只檢查「從哪來」,不檢查「信有沒有被改過」。DKIM 補的就是這一塊:寄信時,郵件主機用私鑰在信上簽一個章;收信方去你的 DNS 拿公鑰來驗這個章。驗得過,代表這封信確實出自你的網域,而且從寄出到收到之間內容沒被竄改。
DKIM 的好處是它跟著信件走。信件如果被轉寄,SPF 常常會因為「轉寄主機不在名單上」而失效,但 DKIM 的簽章還在、還驗得過,信就不至於被判死。這也是為什麼不能只設 SPF。
DMARC:政策與報告
設好 SPF 和 DKIM 之後,還有一個問題沒回答:萬一驗不過,收信方到底該怎麼處理?放行?丟垃圾匣?直接退回?沒有 DMARC 的話,這件事由對方自己決定,你完全沒有話語權。
DMARC 就是你在 DNS 裡宣告的政策,可以選擇三種態度:先觀察(都放行,但把狀況回報給我)、隔離(可疑的丟垃圾郵件匣)、拒收(直接擋掉)。它還有一個很多人不知道的價值:可以要求收信方回傳報告,讓你看到有誰在拿你的網域寄信——包含你自己忘記的那些系統,以及真的在冒用你名義的人。
DMARC 千萬不要一上來就設最嚴
直接跳到「拒收」是最常見的災難:只要有任何一個會寄信的系統沒被納入 SPF/DKIM,那個系統寄的信就會全部被對方擋掉,而且你不會馬上發現。正確做法是先從觀察模式開始,收幾週報告、確認所有正常寄信來源都驗得過,再逐步收緊。
三者對照
| SPF | DKIM | DMARC | |
|---|---|---|---|
| 回答的問題 | 誰能用我的網域寄信 | 這封信被動過手腳嗎 | 驗不過要怎麼處理 |
| 做法 | DNS 上列出授權主機 | 私鑰簽章、公鑰驗證 | DNS 上宣告政策 |
| 被轉寄後 | 容易失效 | 通常仍有效 | 依政策處理 |
| 沒設的後果 | 來源無法驗證 | 內容無法驗證 | 失敗時任人處置、也收不到報告 |
你自己可以先做的檢查
不用等工程師,這兩件事你現在就能做:
- 寄一封信給自己的 Gmail:從公司信箱寄出,在 Gmail 打開該信,點「顯示原始郵件」,看 SPF 與 DKIM 是不是都顯示 PASS。出現 fail 或 softfail 就是有問題。
- 查一下自己的 DNS:用
nslookup -type=TXT 你的網域(Windows)或dig TXT 你的網域(Mac/Linux),確認 SPF 那筆字串存在,而且只有一筆。
如果查出來是 fail、或看到兩筆 SPF,那就找得到問題在哪了。要注意的是,DNS 記錄改壞的代價很高——SPF 少寫一個來源,那個系統的信就全被擋;所以動手前先盤點清楚「公司有哪些東西會用這個網域寄信」,一次納齊再改。
還有這些也會讓信被擋
把 SPF、DKIM、DMARC 設好,解決的是「身分驗證」這一類問題,但不是全部。實務上還會遇到:寄件主機的 IP 進了黑名單(常見於跟大量寄信的人共用主機)、短時間大量寄送觸發對方的頻率限制、以及信件內容本身被判定為推銷。如果驗證都 PASS 了信還是進垃圾匣,方向就要往這幾邊查。
順帶一提,這也是網站搬家最容易出事的一塊——很多人搬完網站才發現信開始漏,因為 MX 和 SPF 沒跟著處理好。
常見問題
Q:為什麼公司寄的信會進到對方的垃圾郵件匣?
多半不是信的內容有問題,而是網域沒向收信方證明身分。SPF、DKIM 沒設或設錯,信就會被判可疑,輕則進垃圾匣、重則退回。其他常見原因還有寄件主機 IP 進黑名單、寄件人位址與實際寄送主機不一致、短時間大量寄送。
Q:SPF、DKIM、DMARC 三個差在哪?
SPF 是授權名單,宣告哪些主機能用你的網域寄信;DKIM 是數位簽章,證明信件出自你的網域且未被竄改;DMARC 是政策與報告,決定驗證失敗時要放行、隔離還是拒收,並可要求回傳報告。三者互補:SPF 管來源、DKIM 管內容、DMARC 管失敗處理。
Q:我可以自己檢查嗎?
可以。從公司信箱寄一封到自己的 Gmail,開信後點「顯示原始郵件」,看 SPF 與 DKIM 是否 PASS;也可以用 nslookup 或 dig 查網域的 TXT 記錄,確認 SPF 存在且只有一筆。出現 fail、softfail 或兩筆 SPF 就要處理。
Q:設定會不會讓現有的信寄不出去?
設定本身不會,改錯會。最常見的意外是漏掉網站通知信、電子報、ERP、客服系統這些也用同網域寄信的來源,SPF 沒納入就會被擋。動手前先盤點所有寄信來源,DMARC 也要從觀察模式開始、確認報告無誤再收緊。