GabrielCYOU_logo

Linux Postfix Mail Server with Gmail SMTP

安裝完 Bitnami Stack 之後發現 WordPress 無法寄信,稍微研究後了解是因爲我根本沒有裝 MTA (Mail Transfer Agent) 或常稱 Mail Server,在 DNS 上會看到 MX,所以這篇來筆記一下安裝 Postfix 並配置他使用 Gmail SMTP 的過程(借用別人的 MTA)。

Reference: https://linux.vbird.org/linux_server/centos6/0380mail.php#postfix

前言

安裝完 Bitnami Stack 之後發現其實他只有 CMS 及 DB,沒有 Mail Server,然後官方文件要求使用者用 WP Mail SMTP 套件使用第三方,但我想用的 Brevo 不曉得為什麼一直無法被我註冊,在一個已有帳號又無法登入又無法重設密碼的窘境嗚。

所以我稍微瞭解了一下 WordPress 傳送郵件使用的 wp_mail() 及 mail() function,前者是 WordPress 的功能,可以放入 From, To, cc 之類的郵件內容,然後透過後者的 php 內建功能,把傳送 Email 的需求丟給伺服器上的 MTA,根據 ChatGPT 描述,默認使用 Sendmail,所以如果你使用 Postfix 建立 MTA,是不需要額外配置 php.ini 文件的。

比較常見的 Mail Server 有 Exim4,這個是 Debian 文件上引導的工具;而在幾十年前的標配是 Sendmail,一直到 2000 年左右漸漸由荷蘭 IBM 研究員開發的 Postfix 取代,他標榜更安全更有效率,是 Sendmail 的改良版,所以預設是相容的。今天會使用 Postfix 來作為我伺服器的 MTA,然後他使用的是 Eclipse Public License (EPL),好像跟我熟悉的 Mosquitto 是一樣的 Foundation,酷!

稍微解釋一下 Postfix 當然可以自己作為郵件伺服器收發,但為了節省設定 & 維護時間,我這邊直接配置他使用 Gmail SMTP,缺點是無法使用自訂網域,但可以保有穩定的收發伺服器。

安裝步驟

  1. DNS 設置 SPF
  2. 安裝 Postfix Mail Server
  3. 配置 /etc/postfix/main.cf 文件
  4. 新增帳號密碼 /etc/postfix/sasl_passwd
  5. 測試!

DNS 設置 SPF

簡單,根據 https://support.google.com/a/answer/10684623?hl=zh-Hant,設定 TXT host @ Value v=spf1 include:_spf.google.com ~all TTL 1小時

安裝 Postfix Mail Server

使用 Internet Site: Send with SMTP 之類的這個選項,然後輸入你的 Domain Name。

sudo apt update
sudo install postfix -y

配置 /etc/postfix/main.cf 文件

在文件尾巴加入下面這個,我習慣使用 vim 編輯器,sudo vim /etc/postfix/main.cf,然後 G 移動滑鼠到文件最後面,接著按 o 在下行插入文字,貼上以下,記得 esc 離開 insert 模式,最後 😡 儲存並離開。

# Gabriel Added @240305
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

新增帳號密碼 /etc/postfix/sasl_passwd

一樣 sudo vim /etc/postfix/sasl_passwd,在裡面貼上,然後編輯,可以用左右鍵移動到要插入的地方點擊 i (insert),改完之後一樣 esc 退出 insert,然後 😡 儲存並退出。密碼可以搜尋 Google 應用程式密碼。

記得注意「myhostname」及「relayhost」不要重複,然後「hostname」及「myorigin」是你的 domain,不然會送不出去。

[smtp.gmail.com]:587 [email protected]:password

完成後 sudo postmap /etc/postfix/sasl_passwd 產生資料;

接著使用 sudo systemctl reload postfix 重新啟動 Postfix。

測試!

在終端機裡面輸入以下以測試發送。

echo "嗨嗨我剛建立了一個 Postfix + Gmail SMTP." | mail -s "Test" [email protected]

postqueue -p 可以看到現在準備被送出的郵件。

sudo tail /var/log/mail.log 可以看到錯誤出現在哪。