Skip to content

SPF 設定怎麼寫?語法、多個寄信服務合併與查詢上限

Posted in :

jc-seo

SPF 設定就是在網域的 DNS 新增一筆以 v=spf1 開頭的 TXT 紀錄,列出所有可以代表這個網域寄信的伺服器,結尾再用 all 指定其他來源怎麼處理。一個網域只能有一筆 SPF 紀錄,公司信箱、電子報平台、官網表單等多個寄信服務,要用 include 或 ip4、ip6 合併在同一筆裡;會觸發 DNS 查詢的項目合計不能超過十個,超過時驗證結果會變成 permerror。設定完成後,寄信到外部信箱,從郵件標頭確認 SPF 的結果。

SPF 紀錄在檢查什麼:寄件伺服器的授權清單

SPF 是網域公開的「誰可以用我的網域寄信」清單。依 RFC 7208,收件伺服器會拿送信過來的伺服器 IP 比對寄件網域的 SPF 紀錄,判斷這台伺服器是否獲得授權。SPF 檢查的是郵件傳輸時的信封寄件者(MAIL FROM),而不是收件者在郵件程式裡看到的寄件者地址;規範也建議一併檢查 HELO 身分。

SPF 只是寄件驗證的一部分:郵件簽章由 DKIM 負責,設定方式見DKIM 金鑰的設定步驟;把驗證結果和看得到的寄件者網域對齊、指定失敗時的處理方式,則要靠 DMARC,見DMARC 的設定與政策收緊。

SPF 語法拆解:版本、機制與限定詞

收件端由左到右比對紀錄中的項目,遇到符合的就得到結果:

項目 用途 計入查詢上限
v=spf1 版本標記,必須放在開頭 否
include 授權第三方寄件服務,後面接對方提供的網域 是
ip4、ip6 授權指定的 IPv4、IPv6 位址或網段 否
a、mx 授權網域 A 紀錄或 MX 紀錄指向的伺服器 是
all 比對其他所有來源,放在結尾 否

機制前可以加限定詞:加號代表通過,是省略時的預設值;減號代表失敗;波浪號代表軟失敗;問號代表中立。Google 與微軟提供的紀錄值,都是在結尾的 all 前加上波浪號或減號,寫成 ~all 或 -all。all 之後的項目一律被忽略;ptr 機制規範明言不應再發布;include 會去評估對方網域的 SPF,對方結果為 pass 才算符合,fail、softfail 或 neutral 都視為不符合、繼續比對下一個項目;對方網域沒有 SPF 紀錄時,驗證會出現 permerror。

動手前先盤點所有用公司網域寄信的來源

漏列任何一個寄信來源,那個來源寄出的信就無法通過 SPF。Google 的設定說明要求先列出所有替網域寄信的服務,可以逐項確認:

  • 公司信箱:Google Workspace、Microsoft 365,或主機附贈的信箱。
  • 官網與系統:聯絡表單、會員與訂單通知,由網站主機直接寄出或透過寄信服務代寄。
  • 行銷與客服工具:電子報平台、CRM、客服工單、電子發票等會自動寄信的服務。
  • 辦公設備與內部伺服器:寄送掃描檔的事務機、公司內部的郵件伺服器或外送閘道。

每個代寄服務都要從它的說明文件取得應加入的 include 值或寄件 IP,新增服務時再補進紀錄。

SPF 設定步驟:在 DNS 代管商新增 TXT 紀錄

  1. 確認網域的名稱伺服器指向哪一家,登入那一家的 DNS 管理頁面。SPF 不在郵件服務後台設定。
  2. 先找有沒有以 v=spf1 開頭的 TXT 紀錄,已經有就修改那一筆。
  3. 依寄信來源組出紀錄值。只用 Google Workspace 時是 v=spf1 include:_spf.google.com ~all;只用 Microsoft 365 時,微軟提供的值是 v=spf1 include:spf.protection.outlook.com -all。
  4. 新增或編輯 TXT 紀錄:主網域的主機欄位填 @,子網域填子網域名稱,值貼上整串紀錄;部分代管商要求前後加上引號。
  5. 存檔後等待生效,Google 說明可能要長達四十八小時。

多個寄信服務怎麼合併成一筆 SPF

RFC 7208 規定同一網域不能有多筆 SPF 紀錄,微軟也說明多筆紀錄會讓驗證回傳 permerror。新增寄信服務時,要加進原本那一筆:

寄信情境 合併後的寫法
Google Workspace 加上 Microsoft 365 v=spf1 include:_spf.google.com include:spf.protection.outlook.com ~all
公司信箱加上自有郵件主機 在 include 旁加上 ip4 或 ip6 項目,接主機對外的固定 IP

v=spf1 只寫一次,all 只放在結尾。結尾怎麼選:Google 建議 ~all,收件伺服器通常仍會收下未授權來源的信、但標為可疑;-all 可能讓這類郵件被拒收,紀錄設定有誤時,也可能讓更多正常郵件被歸為垃圾郵件。微軟則建議 Microsoft 365 網域用 -all,理由是同一網域也應設定 DKIM 與 DMARC。子網域不會沿用主網域的紀錄,用子網域寄信時要替它另建一筆。

DNS 查詢超過十次時的處理方式

RFC 7208 規定 include、a、mx、ptr、exists 與 redirect 會觸發 DNS 查詢,合計上限十個,超過就是 permerror;ip4、ip6 與 all 不計入。include 內層再引用的項目也要一起算。紀錄接近上限時,可以這樣處理:

  • 移除不再使用的來源:停用的電子報平台、舊主機的 IP。
  • 把 include 換成 IP:服務商公布穩定且有文件記載的寄件 IP 時,微軟說明可以改寫成 ip4 或 ip6,但要持續注意對方的 IP 變更;微軟也提醒,Microsoft 365 本身的 include 不適合這樣改寫。
  • 把代寄服務移到子網域:子網域有自己的十次額度。微軟也建議不在你直接控制下的寄信服務,例如大量寄信服務,改用子網域,避免影響主網域的寄件信譽。

怎麼確認 SPF 設定已經生效

  1. 用 Google Admin Toolbox 的 Check MX 工具查詢網域,確認讀得到 SPF 紀錄,並查看用掉的查詢次數。
  2. 從每個寄信來源各寄一封信到外部信箱,例如官網表單送出一筆測試資料。
  3. 在網頁版 Gmail 開啟該信,選「顯示原始郵件」,找 Authentication-Results 段落裡 spf 後面的結果。

顯示 pass 代表通過;neutral、softfail 或 fail 表示寄件 IP 不在紀錄裡,合法來源要補上;出現 temperror 或 permerror,先檢查語法、紀錄是否重複與查詢次數。郵件經過轉寄後,即使設定正確也可能失敗。驗證通過卻仍被退信或進垃圾郵件,可對照公司信箱被 Gmail 擋信的排查順序。

常見問題

Gmail 的 SPF 設定要填什麼?

用 Google Workspace 收發公司網域的信時,Google 提供的值是 v=spf1 include:_spf.google.com ~all。個人 Gmail 地址屬於 Google 的網域,使用者無法自行設定 SPF。

網域完全不寄信,也需要設定 SPF 嗎?

建議設定,避免網域被冒用寄信。Google 建議不寄信的網域使用 v=spf1 ~all,微軟則建議停放網域使用 v=spf1 -all,宣告不會寄出郵件。

SPF 結尾一定要用 -all 才安全嗎?

不一定。-all 可能讓未授權的信被拒收,但紀錄漏列來源時,正常郵件也會受影響。可以先用 ~all 確認所有來源都通過,再搭配 DKIM 與 DMARC 評估。

子網域需要另外設定 SPF 嗎?

需要。Google 與微軟都說明,用子網域寄信時要替它建立自己的 SPF 紀錄,主網域的紀錄不會套用到子網域。

換了電子報平台,舊的 include 要刪掉嗎?

要。Google 建議從紀錄移除不再用來寄信的網域與 IP。留著舊項目會用掉查詢額度,也等於繼續授權已不再管理的寄件來源。

本文由京采數位科技整理。我們自 2005 年起提供官網設計、系統開發與 Google SEO 服務,實際案例可見成果與案例。

想直接討論你自己的網站狀況,或需要一份初步的搜尋機會評估?

相關主題

下一步

建議先把所有用公司網域寄信的服務列成清單,再對照目前的 SPF 紀錄找出漏列或過時的項目。京采的技術 SEO 與網站健檢服務可以協助檢查網域 DNS 中 SPF 的語法與查詢次數、合併重複的紀錄,並確認官網表單與會員通知信的寄件設定;需要協助時歡迎與我們聯繫。