網站通知信 DKIM 驗證失敗?從原始郵件追查 selector 與 DNS
網站通知信寄達 Gmail 卻顯示 DKIM 失敗時,先確認是哪一家服務實際寄信。網站 SMTP、交易信服務及人工信箱可能使用不同簽署網域與 selector;同一封信的 SPF 成功不代表 DKIM 一定成功。
查看單封測試信
從受控測試帳號寄一封不含個資的測試信到另一個 Gmail 信箱,開啟該信,在更多選單選「顯示原始郵件」。記下接收時間、From 網域、Authentication-Results 的 DKIM 結果,以及 DKIM-Signature 的 d 和 s。以下為示意,實際標頭可能換行或存在多個簽章:
DKIM-Signature: v=1; d=example.com; s=mailer; ...
Authentication-Results: ... dkim=pass header.d=example.com
範例中的簽署網域是 example.com,selector 是 mailer;dkim=pass 代表該接收者對該簽章驗證通過,但不保證信件一定進收件匣,也不代表 DMARC 對齊一定通過。若多個簽章,逐筆比對與寄件服務對應的結果。
查詢公鑰並比對服務設定
在有 dig 的電腦將 selector 與網域替換為實際值:
dig TXT mailer._domainkey.example.com +short
依寄信服務設計,此名稱可能是 TXT,也可能透過 CNAME 指向服務商提供的記錄;以該服務商指定的記錄型態與完整值為準。沒有結果時核對拼字、權威 DNS、記錄名稱是否被控制台重複附加網域,以及 DNS 更新時間。不要把範例公鑰套入正式網域。若有公鑰但驗證失敗,請服務商檢查簽署使用的私鑰是否對應,以及郵件內容是否在簽署後被修改。
修正與驗收
先保存既有 DNS 紀錄並確認同網域其他寄信服務,逐筆按供應商指示修改;避免刪除仍被其他服務使用的 selector。等待 DNS 快取更新後,重新寄新的測試信並檢查 Gmail 結果及實際簽署網域。若變更造成其他服務失敗,恢復事前紀錄並考慮 DNS 快取延遲;重新測試各寄信管道。若測試信完全沒收到,先查寄送與投遞紀錄,可參考WordPress 發信紀錄檢查。
範例:依結果區分 DNS 與簽章問題
Windows 可在 PowerShell 查詢 TXT 和可能存在的 CNAME,以下名稱必須換成郵件標頭與寄信服務提供的實際值:
Resolve-DnsName -Name mailer._domainkey.example.com -Type TXT
Resolve-DnsName -Name mailer._domainkey.example.com -Type CNAME
若服務要求 CNAME,第一個查詢的結果可能隨解析器與別名處理方式不同,應查別名目標並核對供應商文件;不存在某一類記錄不代表整個網域不存在。若回應為 NXDOMAIN,先確認 selector 與網域拼字及權威 DNS;若查到舊值,檢查 TTL 與不同遞迴解析器後等待更新。DNS 查詢成功只能說明公鑰可取得,不能證明私鑰相符或郵件簽章有效。
例如 Authentication-Results 顯示 dkim=fail,而 DNS 顯示預期的公鑰,應請發信服務查私鑰、簽署網域、selector 及簽後內容變更;若是 dkim=none,先確認該封信有無 DKIM-Signature,並查該寄信管道是否啟用簽署。郵件可能經轉寄或郵件清單改寫,需比較直接寄送與轉寄結果。驗收時使用新測試信,確認對應 d= 網域的 dkim=pass,並依需求另查 From 網域與 DMARC 對齊;不要公開完整郵件標頭中的地址、追蹤碼或識別資訊。









臉書留言
一般留言