GabrielCYOU_logo

WordPress SMTP 無法傳送郵件給自己網域

這個 SMTP 問題有關 DNS,真的是找解方找了整個晚上,搞得人好燥,但只能說是自己才疏學淺,但總之是解決了!><

感謝我孜孜不倦問 ChatGPT 嗚嗚

前情提要

好的今天就是心血來潮想要弄出自己的網域的 Email,一開始想說從 WordPress 最原生的 wp_mail() 來找找解方,聽說是可以在自己伺服器上架設 Mail Server(所以才有上一篇),這個 Server 不管是你要用它來收發(IMAP、SMTP)都可以,也可以直接在裡面設定使用外部 SMTP,例如 Gmail。

結果呢,因為設定 SMTP 會需要 Google 應用程式密碼,所以申請出來了,也確實在伺服器架了一個可以寄送的 Postfix Mail Server,設定 Gmail SMTP,可以看這篇。但是就發現雖然使用 echo 的方式可以寄送,WordPress 卻沒有辦法使用它,出現「postalias: fatal: open #: No such file or directory」錯誤,因為網路資料太少所以我努力了兩個小時左右就放棄了,不過接著就馬上想到我的 Gmail SMTP 有應用程式密碼,意思就是可以使用 WP Mail SMTP 套件來設定 Other SMTP!沒想到就這樣被我猜中了,果然可以用,而且這個方式最一開始就在我眼前,但奇怪的就是寄給其他人都可以,卻沒有辦法寄給我自己的網域,嘗試了一個小時後我把腦袋清空,也把問了 ChatGPT 的一大堆問題清空重新梳理一遍。

背景

  1. Namecheap 設定 Email Forward 將到網域的郵件轉寄給 Gmail
  2. WordPress 設定 Gmail SMTP 寄送郵件
  3. 上述收發使用的 Gmail 為同個帳號

解方:SMTP 不動,修改 SPF

我原本有以下三個 TXT,分別是 Google 建議的、Namecheap 使用 Email Redirect 必須的,以及非這次主教的 DMARC。

TXT Record (Gmail)
Host: @
Value: v=spf1 include:_spf.google.com ~all
TTL Automatic

TXT Record (Namecheap)
Host: @
Value: v=spf1 include:spf.efwd.registrar-servers.com ~all
TTL Automatic

TXT Record
Host: _dmarc
Value: 不重要
TTL Automatic

只要把他們兩個合再一起變成以下這樣就可以了!

TXT Record (Gmail)
Host: @
Value: v=spf1 include:_spf.google.com include:spf.efwd.registrar-servers.com ~all
TTL Automatic

解釋 SMTP 及 DNS 的 SPF

就是呢,在郵件發出後 SPF 會後面,接收方會驗證這個 SPF,確定說這個郵件發送者是有在 DNS 設定裡面的,藉此避免無權代理,而一般來說 SPF 只會有一個,所以像是我原本設定那樣兩個,其中一個就會被吃掉,好事是 SPF 可以連在一起。

然後在驗證完後才會開始轉寄,所以跟 SPF 無關,我一開始的情況:使用 Gmail SMTP 寄送電子郵件給自己,然後自己的網域再透過 Namecheap 將郵件轉交給那個寄出信件的 Gmail,應該就是因為驗證沒有過(可能是 Namecheap 自己的驗證)。