Google Compute Engine 是不允使用 25 / 465 / 587 端口對外連接,也就說 google 不允許使用 PHP mail() 來發送郵件,因為這些端口已被大量濫用亂發廣告郵件。
在 Google Cloud Platform 主機上,WordPress 的聯絡表單可以正常發送郵件,只能使用 google 信賴的第三方提供商以 SMTP 傳輸協定方式,如 SendGrid、Mailgun 或 Mailjet ,這樣可以確保主機的郵件不會誤判為圾垃郵件。
SendGrid、Mailgun 或 Mailjet 每個mail server 都有免費的email 額度,超過就要收錢了,而且註冊時就要使用信用卡
推薦用Mailgun, 每個月可以有10,000 免費的email 額度,不過也有限制每個小時只能寄送100個信件
MailGun註冊完後需要通過網域驗證,到 DNS 設定一些 TXT、dkim、CNAME、MX 紀錄就可以綁訂網域到 MainGun 上面
設定完後點進去你要設定的網域,看到 Domain Information ,把 Default SMTP Login 跟 Default Password 記起來,在主機上要需要設定SASL驗證
在Google Compute Engine 安裝 postfix 以及SASL驗證工具
1 |
yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y |
接下來修改/etc/postfix/main.cf (修改前還是要先備份一下main.cf)
1 |
vi /etc/postfix/main.cf |
在main.cf最底下新增內容
1 2 3 4 5 6 7 8 9 |
# default_transport = error # relay_transport = error 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 |
接下來產生SASL 密碼 map
1 2 3 |
cat > /etc/postfix/sasl_passwd << EOF [smtp.mailgun.org]:2525 YOUR_SMTP_LOGIN:YOUR_SMTP_PASSWORD EOF |
YOUR_SMTP_LOGIN 就是先前提到的Default SMTP Login
YOUR_SMTP_PASSWORD 就是先前提到的Default Password
用 postmap 方式生成一個 .db 文件
1 2 |
postmap /etc/postfix/sasl_passwd ls -l /etc/postfix/sasl_passwd* |
刪除密碼憑證
1 |
rm /etc/postfix/sasl_passwd |
給予 .db 文件權限
1 |
chmod 600 /etc/postfix/sasl_passwd.db |
重啟 postfix
1 |
/etc/init.d/postfix restart |
寄一封信給自己測試是否成功
1 |
echo 'Test passed.' | mail -s Test-Email EMAIL@EXAMPLE.COM |
從mail log 確認信件是否寄出
1 |
tail -n 5 /var/log/maillog |
如果看到類似內容,表示郵件寄信成功,也可以從Mailgun Log 確認郵件
1 2 3 4 5 6 |
# >tail -n 5 /var/log/maillog Aug 14 11:21:49 PFC postfix/qmgr[16507]: 8AFE379B1: removed Aug 14 11:21:49 PFC postfix/smtp[17188]: C586D79B2: to=<EMAIL@EXAMPLE.COM>, relay=smtp.mailgun.org[52.202.86.134]:25, delay=42552, delays=42550/0.01/1.2/0.9, dsn=2.0.0, status=sent (250 Great success) Aug 14 11:21:49 PFC postfix/qmgr[16507]: C586D79B2: removed Aug 14 11:21:49 PFC postfix/smtp[17191]: BE5A279B4: to=<EMAIL@EXAMPLE.COM>, relay=smtp.mailgun.org[34.206.32.229]:25, delay=42507, delays=42505/0.02/1.2/0.97, dsn=2.0.0, status=sent (250 Great success) Aug 14 11:21:49 PFC postfix/qmgr[16507]: BE5A279B4: removed |
如果信件無法寄出,先確認防火牆port 2525是否有打開