設定 SPF, DKIM, DMARC Email 驗證解決「Gmail 未經驗證網域」警告


Gmail SPF 與 DMARC Email 驗證問題

現在透過 G Suite 服務很方便,掛上自己的網域就可以透過 Gmail 收發自己的信件,加上 Gmail 跟神一樣的垃圾信阻擋機制與 Web 介面,一用就是好幾年了。如果早期有加入 Google App Engine (G Suite 前身) 免費試用計畫的網友們,真的是賺到了 (偷笑.......),除了空間容量小了點,可以免費使用 50 個帳號,真的超 High-der.......

有時候會寫一些程式透過 Google SMTP Server 發信,一直以來都有個問題,就是收信者在 Gmail 看到的發信者會出現「未經驗證網域...」等等警告,運氣不好還會跑進廣告信箱。這時候如果打開信件的原始內容,可以發現以下資訊:

ARC-Authentication-Results: i=1; mx.google.com;
spf=softfail (google.com: domain of transitioning support@domain.com does not designate {Server IP Address} as permitted sender) smtp.mailfrom=support@domain.com;
dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=domain.com

上述紅色字就是無法驗證的結果,很久以前就有加過 SPF 設定,一直到最近剛好跟同事討論,才心血來潮專心處理這個 Email Server 發信驗證問題。目前歸納出必勝的 DNS 設定方法,紀錄一下順便分享給各位。

CloudFlare 設定 Email 相關的 DNS Record

由於我也是 CloudFlare 的愛用者,他們的 DNS 管理介面就只有好用而已,因此這裡也會用 CloudFlare 進行教學。其他的 DNS Manager 其實也是大同小異,找一下設定對應即可。開始之前,建議先設定好正確的 Email MX Record,而且您必須在 G Suite 先驗證您的網域所有權,這樣才能產生 Domain Key。我們接下來一共要設定 SPF, DMARC, DKIM 這三種機制,我們就來一個一個說明吧:

設定 SPF 發信驗證

SPF 是一個防止網域冒名發信的機制,透過設定自己網域的 TXT 紀錄來指定發信主機,如果接收 Email 的主機找不到信件網域的 SPF 記錄,在無法驗證的情況下退信機率極高!要加入 SPF 很簡單,請在 DNS 新增一筆記錄如下:

  • Type: TXT
  • Host: @
  • Value: v=spf1 include:_spf.google.com ~all

如果您的 DNS 主機有支援 SPF 設定,也可以另外加入 SPF Type,但是原本的 TXT Record 還是一定要新增會比較保險。如果您除了使用 GMail 還有在其他主機透過程式發信,也一定要加入發信主機的 IP Address,SPF Record 如下:

  • Type: SPF
  • Host: @
  • Value: v=spf1 include:_spf.google.com ip4:1.0.0.2 ip4:1.0.0.1 ~all

設定 DMARC 處理策略

設定好 SPF 之後我們先設定 DMARC,因為這個比較簡單,但是實際上 DMARC 驗證機制是基於 SPF 與 DKIM 兩個驗證方法。DMARC 直接在 DNS Server 設定即可,請加入以下 TXT Record:

  • Type: TXT
  • Host: _dmarc
  • Value: v=DMARC1; p=none; rua=mailto:postmaster@<您的網域>.com

設定 DKIM 公鑰

DKIM 大概是這三個設定裡面最麻煩的,好在我用了 Google (這不是業配文!!) 可以省點力氣,透過管理介面就可以自動產生 Domain Key。讓我們來手把手教學一下吧:

先登入 Google Admin Console 然後點選「應用程式」

Google Admin Console

Google Admin Console

然後選擇「G Suite 核心應用程式」

Google App Engine

Google App Engine

然後選擇「Gmail」

Gmail Admin

進入後往下拉有一個「驗證電子郵件」功能,點選後展開:

google dkim

選擇你想要驗證的網域後按下「產生新記錄」,如下:

Gmail 驗證電子郵件

金鑰長度我習慣選 2048, 但是其實還是有一些比較舊的 Email 主機只支援 1024 驗證,然後按下「產生」

google-skim-domain-key

畫面就會出現 Public Key,這時候到你的 DNS 設定一筆 TXT Record (如下),設定好以後回來下「開始驗證」按鈕

TXT google._domainkey

  • Type: TXT
  • Host: google._domainkey
  • Value: v=DKIM1; k=ras; ......{產生的 Public Key}

google domain key

如果驗證順利,就會出現綠色的「驗證電子郵件」

gmail 驗證電子郵件

檢查 Email 驗證設定與驗證工具

以上全部設定完成後,我們最後確認一下 DNS 應該會有哪些設定:

  1. MX Record
  2. SPF Record (如果您的 DNS 有支援)
  3. TXT Record for DMARC (_dmarc)
  4. TXT Record for DKIM (google._domainkey)
  5. TXT Record for SPF (@)

CloudFlare 設定畫面如下:

cloudflare email verify

這些 DNS Recore 都加上以後,最後我們透過 Google 大神提供的「Mail Check MX」檢查工具,輸入你的網址就可以看到檢查結果如下:

email check

如果都設定完成後,一天後 (DNS 有時候需要 24HR 同步) Mail 還是被退信或無法順利寄達,也有可能你的 Server 已經被列入黑名單了,可以透過以下網址查詢 IP Address:

https://toolbox.googleapps.com/apps/checkmx/check

我會的就這幾招了,剩下只好 Good Luck 囉~今天先到這裡了,你都學會了嗎?啊掰~

這是真的廣告

白金贊助

平價童鞋首選