開始使用 Google Cloud Platform(GCP)後,好不容易終於建立了一台執行個體,但實際把環境建立好後卻發現無法寄信?其實只要透過GCP第三方「Mailgun」寄信服務搭配下方 Google Cloud Platform 設定教學,問題就可以迎刃而解!
無法寄信?透過神奇的 Mailgun 來解決!
目前網路上充斥著大量的垃圾信件,而這些垃圾信大多數都是由疏於管理的主機所寄出。為了避免這樣的問題產生,Google 並不允許直接在 25/465/587Port 提供寄送郵件服務,必須透過第三方寄信服務或是 G Suite SMTP relay 才能夠寄信,以降低垃圾信件的產生。
因此本文將帶您實際從 Mailgun 帳號申請,到設定 Postfix 與寄送測試信,幫助各位解決無法寄信的問題。
Mailgun 帳號申請與 Postfix 設定教學
Step1. 先至Google Partner頁面,點擊「Try Sending Email With Mailgun」申請 Mailgun 帳戶,否則免費額度只會有 10,000 封哦!
Step2. 進入後填寫使用者資訊與信用卡資料,記得確認右側的 Plan 是「Google – Pay as you Go」才有提供每月 30,000 封的額度。
※ 若選擇不綁定信用卡,免費額度會降至每月 10,000 封,建議直接綁定信用卡。
Step3. 填寫好後點選「Create Account」送出,之後就會到這一頁,直接點擊「Add A Domain」進行下一步即可。
Step4. Mailgun建議用戶若只使用寄信功能,可以使用 Subdomain 進行註冊,使用 Subdomain 註冊還是可以使用原有 domain 進行寄信。 舉例來說,依照建議使用「mg.digital-transformation.media」註冊,這樣我仍然可以使用「@digital-transformation.media」來寄送信件。
Step5. 點擊「Add Domain」後,Mailgun 要求用戶至目前的 DNS 主機設定相對應的紀錄值,以證明此網域確實為你所有。此時就要到所使用的 DNS 主機後台新增 DNS 紀錄值。
Step6. 由於「digital-transformation.media」是使用 Google Cloud Platform 提供的 Cloud DNS 服務,故直接至 GCP 後台,將上述的紀錄值一一加入即可。
※ 依 DNS 主機商的不同,可能需要 2~48 小時才會生效。
Step7. 等待 DNS 生效的同時,也一併去當初申請 Mailgun 的信箱收信,至信件中的連結驗證信箱後,才能夠開始寄信。
Step8. 前往連結後,會要求提供手機號碼進行驗證,才能進行下一步驟。
Step9. 手機驗證完後會回到 Dashboard,繼續前往驗證 DNS 設定值,點選右側的「Verify a custom domain」。
Step10. 出現的頁面點擊您所註冊的網域名稱,以此例子為「mg.digital-transformation.media」。
Step11. 點擊之後到下方「Domain Verification & DNS」的段落,點選「Check DNS Records NOW」的按鈕,要求 Mailgun 重新偵測一次 DNS 紀錄是否生效。
Step12. 如果都變成綠色,代表 DNS 設定值正確,且已經生效。若還是黃色或是紅色,代表 DNS 設定值有誤,或是尚未生效,請 2~48 小時後再試試看。
Step13. 都變成綠色之後,用滑鼠滾輪回到頁面頂端,記下您的 SMTP 帳號與密碼(Default SMTP Login與Default Password),準備開始設定 Google Cloud Platform 上的執行個體。
Step14. 用SSH連線到您的執行個體,並使用「sudo su -」的指令,切換至 root 帳號。
Step15. 先建立一個安全的 umask 遮罩,以確保之後建立檔案的安全性,輸入「umask 077」後按 enter。
Step16. 接下來要安裝 postfix 與 SMTP 驗證相關的套件:
若使用 CentOS,使用該指令:「yum install postfix cyrus-sasl-plain cyrus-sasl-md5 mailx -y」
若是 Debian,改用該指令:「apt-get update && apt-get install postfix libsasl2-modules -y」
此例為CentOS 7 故使用 yum 進行安裝。
Step17. 安裝完後要進行 postfix 設定檔的修改,讓 postfix 知道我要從 Mailgun 寄信。
而 postfix 的設定檔一般會在 /etc/postfix/main.cf,需要用 vim 來進行編輯,故使用「vim /etc/postfix/main.cf 」的指令
Step18. 我們要在 main.cf 的最後一行加上 Mailgun 的設定值,在 vim 中可以按下大寫「G」,直接到達檔案尾端。並按下「o」新增一行,並進入編輯模式(左下角出現–INSERT–的狀態,才能進行檔案編輯)。
Step19. 複製並貼上以下的設定值:
relayhost = [smtp.mailgun.org]:2525
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
Step20. 接著按鍵盤左上角的 Esc 鍵離開編輯模式,可以看到左下角的–INSERT–消失。
Step21. 此時要將此設定檔存檔,並離開 vim 文字編輯器。輸入「:wq」,按下 enter 即可。(輸入冒號與 wq:冒號代表給 vim 的指令,w 代表寫入,q 代表離開編輯器。)
Step22. 按下 enter 後,回到 SSH 的畫面,接下來要把帳號密碼提供給 postfix,這樣 postfix 寄信時連線至 Mailgun,才能夠成功登入並寄送信件。直接使用 vim 來建立這個檔案,依照前面的設定內容,postfix 是要去 /etc/postfix/sasl_passwd 這個檔案取得帳號密碼,所以我們要將我們的 SMTP 帳號密碼放在這裡。
直接使用 vim 來建立吧!輸入「vim /etc/postfix/sasl_passwd」後按下 enter,就可以建立新的檔案了。
Step23. 進入 vim,開始編輯檔案前需要進入編輯模式才能修改檔案內容,此時可以直接按「i」進入編輯模式。貼上:[smtp.mailgun.org]:2525 SMTP_LOGIN:SMTP_PASSWORD
「SMTP_LOGIN」請取代成您的「Default SMTP Login」帳號名稱
「SMTP_PASSWORD」請取代成您的「Default Password」
Step24. 按下 Esc,–INSERT–消失後,按下「:wq」,再 enter,存檔並離開。
Step25. 接著利用 postmap 將剛剛的 sasl_passwd 轉換成 postfix 看得懂的資料庫檔案。
輸入指令即可:postmap /etc/postfix/sasl_passwd
Step26. 確認看看是否有產生.db 的檔案,使用以下指令來檢查。
ls -l /etc/postfix/sasl_passwd.db
有出現代表 postmap 成功執行,沒有出現可能要看一下錯誤訊息或是往上比對是否有步驟漏掉。
Step27. 如果沒有問題,刪除含有帳號密碼的文字檔吧!以免別人看到您的帳號密碼而被盜用。使用以下指令:
rm /etc/postfix/sasl_passwd
會再問您一次要不要刪除此檔案,輸入 y,再按 enter 代表 yes。
Step28. 設定檔更新後,通知 postfix 重新載入新的設定檔,需使用以下指令:postfix reload
Step29. 此時我們可以開始寄測試信了,利用稍早安裝的 mailx 套件做指令列的寄信。
輸入以下指令就可以寄信:
EMAIL@EXAMPLE.COM(請取代成您的信箱,才收得到測試信喔!)
echo ‘Test passed.’ | mail -s Test-Email EMAIL@EXAMPLE.COM
Step30. 到信箱收信,若有收到剛剛寄出的測試信,代表寄信功能正常了!
這時可以測試看看您的應用程式是否能夠透過 postfix 開始寄信。
經過上述 Google Cloud Platform 的 Mailgun 步驟教學,終於可以從 GCP 執行個體寄發信件了!
由重重的驗證來看,Mailgun 確實非常仔細在避免垃圾與惡意信件,而 Mailgun 自己也有 Dashboard 可以查看寄信狀態,有非常方便的統計圖表可以確認到底每個月寄送多少信件。
但也由於驗證的步驟較多,除了基本的 email 驗證之外、還需要修改 DNS、手機也要進行驗證,造成設定的時間會比較長一些,不過只要設定完成,就可以一勞永逸了。
延伸閱讀
Sendgrid 寄信設定,GCP 第三方寄信服務手把手教學!
在現有的 GCE linux 主機上設定 SFTP 的方式