[WordPress] 讓 Google Cloud Platform 上的 WordPress 站台,透過 Mailgun 第三方服務寄送郵件
在 Google Cloud Platform 上裝好 WordPress 之後,
發現有個奇怪的問題:有網友在文章裡留言時,我都沒辦法收到郵件通知…
這樣其實有點麻煩,我得每天自己去 WordPress 後台 > 控制台那邊,
看看今天有沒有人來留言,以免回覆時間隔太久了…
查了一下,原因似乎是 Google Cloud Platform 的限制,
它並不開放傳統的 SMTP 的 port,所以信件沒辦法寄出來…
在 Google Cloud Platform 的文件 上,有提到可以使用第三方提供的 SMTP 服務,
來避開這個問題,就先來看看其中一種 Mailgun 要怎麼用吧~
1. 註冊 Mailgun 帳號
到 Mailgun 官網註冊一個新的帳號,
註冊頁下面有個 payment info 可以填信用卡資料,可以先不填:
填入手機號碼,會傳簡訊驗證碼過來:
輸入驗證碼:
驗證完畢,帳號就算註冊成功了~
剛註冊好的帳號,一天最多只能從 WordPress 網站寄 300 封信,
給已經認證過的 email 地址 (目前就是只有自己剛剛填的 email)。
可以用 SSH 連線進 Google Cloud Platform 上的 WordPress 站台,
再執行上面的 curl 指令,應該可以收到測試成功的信~
(不過它這是透過 HTTPS 將信件內容傳給 Mailgun,
Mailgun 再把信寄到我的 email,並不算是在 WordPress 站台上使用 SMTP 寄信)
2. 在 Mailgun 中新增 WordPress 網域
如果在 Mailgun 中新增網域的話,可以增加可以寄信的數量 (目前是到 10000 封/月)~
到 Mailgun 官網中,選擇 Add Domain,
這邊它提醒說最好是設定成 sub domain,
像我的 WordPress 主站是 ephrain.net,另外有一個旅遊的副站 travel.ephrain.net,
因此我就是新增 travel.ephrain.net 網域,但 ephrain.net 網域一樣可以寄信:
3. 在 DNS 中加上 Mailgun 的驗證資訊
接下來是最麻煩的地方…
剛剛在第二步加入網域後,下面就會秀出一堆要加到 DNS 的資訊,例如:
我的網域名稱是向 Google Domains 註冊的,
因此就到 Google Domains > DNS > Custom resource records,來加入需要的資訊~
不過加入第一個 travel.ephrain.net 的 TXT 欄位就遇到問題,
說有名稱衝突 (Name conflict):
查了一下,原來有 CNAME (alias,別名) 的話,就不能再有同名的其他型態資料。
原本我用 CNAME 是希望如果 IP 有改的話,
我只要改 @ 對應的 IP 就好,不用再去改 travel 的 IP。
不過既然 CNAME 會導致其他型態的資料都不能加,只好改用 A 型態記錄 IP,
這樣子就能順利加上 TXT 型態資料了:
要求的資料全部加上的結果:
這時再回到 Mailgun 網頁,按下 Verification,
應該就能從 DNS 得到驗證資料,確認這個網域是我們所有的了~
Mailgun 這時會提供一個登入 SMTP 伺服器用的帳號密碼,
我們可以點 Manage SMTP credentials 來修改密碼:
這邊可以用 New SMTP Credential 來新增帳號,
或是點預設帳號 postmaster@<domain> 旁邊的工具圖示,就能修改密碼:
在 Mailgun 網頁,可以看到我們驗證成功的網域,
代表我們現在可以從這網域,透過 Mailgun 每個月寄送最多一萬封信了:
4. 讓 WordPress 的信件透過 Mailgun 轉發
到 WordPress 後台 > 外掛區,安裝 Mailgun for WordPress:
接著到這外掛的 Settings,填入一些必要資訊,
像是註冊 Mailgun 時使用的網域名稱,而 API key 從 Mailgun 網站上可以查到:
這樣子就算設定完成了~
測試一下,隨便找一篇文章留言,
差不多在 20 秒內就有收到留言的通知信囉~
不過 Mailgun 的設定過程,整體複雜度頗高,
接下來會再試一下文件裡提到的 WP Mail SMTP 外掛,
看看能不能直接使用 Gmail 來寄信囉~
參考資料:
Bitnami: How To Configure Your Application To Use A Third-Party SMTP Service For Outgoing Email?
Adding both CNAME and TXT DNS records for one subdomain