📧 Postfix
安全可靠的 SMTP 郵件傳輸代理
Postfix 是高安全性的 MTA(郵件傳輸代理),設計目標是取代 Sendmail,支援 SASL 認證、TLS 加密、SPF/DKIM 整合,適合自建郵件發送服務。
安裝
$ sudo apt update && sudo apt install -y postfix mailutils
# 安裝時選擇 "Internet Site",輸入你的郵件網域(如 example.com)基本設定(/etc/postfix/main.cf)
# 主機名稱(需與 MX 記錄一致)
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
# 接受哪些 domain 的郵件
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 信任的網路(只有這些 IP 可以轉發郵件)
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# 信箱格式與存放路徑
home_mailbox = Maildir/
# 連線大小限制
message_size_limit = 10240000 # 10MB
# TLS 設定(啟用加密)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtp_tls_security_level = may$ sudo postfix check && sudo systemctl restart postfix透過 SMTP 服務轉發(推薦中小型應用)
若只是要讓應用程式發送通知信,透過現有的 SMTP 服務(Gmail、SendGrid、Mailgun)轉發更簡單且可靠:
# 在 main.cf 加入
relayhost = [smtp.sendgrid.net]: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$ echo "[smtp.sendgrid.net]:587 apikey:你的API金鑰" | sudo tee /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo systemctl restart postfix測試發信
$ # 傳送測試信
echo "測試信內容" | mail -s "測試主旨" test@example.com
# 查看郵件佇列
mailq
# 查看發送日誌
sudo tail -f /var/log/mail.logSPF / DKIM 設定(提高到達率)
SPF(在 DNS 新增 TXT 記錄)
# DNS TXT 記錄(@)
"v=spf1 ip4:你的伺服器IP mx ~all"DKIM(使用 opendkim)
$ sudo apt install -y opendkim opendkim-tools
sudo opendkim-genkey -t -s mail -d example.com
# 產生 mail.private(私鑰)和 mail.txt(DNS 記錄)
cat mail.txt # 複製內容加入 DNS TXT 記錄常用操作
| 操作 | 指令 |
|---|---|
| 檢查設定 | sudo postfix check |
| 重新載入設定 | sudo systemctl reload postfix |
| 查看郵件佇列 | mailq |
| 強制重送佇列中的郵件 | sudo postqueue -f |
| 清空佇列 | sudo postsuper -d ALL |
| 查看即時日誌 | sudo tail -f /var/log/mail.log |