HELPER VPS

VPS 發送郵件:以 587、465 號連接埠連接 SMTP 發送服務

HELPER VPS 所有伺服器為防垃圾郵件已關閉對外的 25 號連接埠,使用同一網絡的所有伺服器 IP 信譽因而保持良好。郵件經郵件發送服務的 587 或 465 號連接埠發送,更能順利到達收件匣。

為何以 587 及 465 號連接埠發送

25 號連接埠是郵件伺服器之間轉交郵件的連接埠。由伺服器直接發到收件方郵件伺服器,IP 信譽、反向 DNS 以至發送量管理都要親自處理,而由新伺服器 IP 發出的郵件容易被列入垃圾郵件。

587 及 465 號是已登入用戶交付郵件的提交連接埠。以帳號及密碼登入郵件發送服務交付郵件,由信譽受管理的發送伺服器代為轉交。這是讓會員註冊確認、找回密碼、訂單通知等郵件順利到達收件匣最可靠的方法。

  • 587 號:以明文連線後,以 STARTTLS 開始加密。大部分服務及程式預設使用此連接埠。
  • 465 號:由一開始以 TLS 加密連線。設定畫面多數顯示為 SSL 或 SSL/TLS。

選擇郵件發送服務

郵件發送服務大致分兩種:一種是大量發送網站及應用程式通知郵件的交易郵件服務,另一種是已在使用的公司郵件或個人郵件帳戶的 SMTP 功能。無論哪種,取得以下四項資料便完成設定準備。

  • SMTP 伺服器位址:例如 smtp.example.com
  • 連接埠:587(STARTTLS)或 465(SSL/TLS)
  • 用戶名稱:服務指定的帳號或郵件地址
  • 密碼:服務的 SMTP 專用密碼或 API 金鑰

發送量大的網店或服務,交易郵件服務會代為處理發送紀錄、退信及取消訂閱管理,十分方便。如只有幾封通知,郵件帳戶的 SMTP 已足夠。

在伺服器確認 SMTP 連線

設定前先確認伺服器能否順利連到發送服務。以下指令只確認連線,不會發送郵件。

終端機
nc -vz smtp.example.com 587
openssl s_client -starttls smtp -connect smtp.example.com:587 -crlf -quiet
openssl s_client -connect smtp.example.com:465 -crlf -quiet

首行顯示 succeeded 或 open,而 openssl 指令顯示以 220 開頭的伺服器問候語,即表示準備完成。以 Ctrl+C 離開。如沒有 nc 指令,Ubuntu 及 Debian 以 apt install -y netcat-openbsd、AlmaLinux 以 dnf install -y nmap-ncat 安裝。

把 Postfix 連接到發送服務

想把伺服器程式、cron 通知及 mail 指令發出的郵件集中一處,請把 Postfix 設定為轉交發送服務的轉發。伺服器內所有郵件都會經 587 號連接埠登入後發出。

第 1 步:安裝

Ubuntu, Debian
apt install -y postfix libsasl2-modules mailutils

安裝期間詢問郵件設定類型時選擇 Internet Site,郵件名稱填入你的網域。AlmaLinux 10 以 dnf install -y postfix cyrus-sasl-plain s-nail 安裝,再以 systemctl enable --now postfix 啟用。

第 2 步:轉發設定

終端機
postconf -e 'relayhost = [smtp.example.com]:587'
postconf -e 'smtp_sasl_auth_enable = yes'
postconf -e 'smtp_sasl_password_maps = texthash:/etc/postfix/sasl_passwd'
postconf -e 'smtp_sasl_security_options = noanonymous'
postconf -e 'smtp_tls_security_level = encrypt'
postconf -e 'inet_interfaces = loopback-only'

inet_interfaces = loopback-only 只接收伺服器內發出的郵件,防止外部把此伺服器用作郵件中繼。

第 3 步:儲存登入資料

終端機
echo '[smtp.example.com]:587 SMTP_USER:SMTP_PASSWORD' > /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
systemctl restart postfix

如服務使用 465 號連接埠,把 relayhost 及 sasl_passwd 的連接埠改為 465,並多加一行 postconf -e 'smtp_tls_wrappermode = yes'。

第 4 步:測試發送及查看日誌

終端機
echo "VPS mail test" | mail -s "Test from VPS" you@example.com
postqueue -p
journalctl -t postfix/smtp -n 20

日誌顯示 status=sent,即表示發送服務已接收郵件。postqueue -p 顯示尚未發出的郵件清單。如修改了登入資料,執行 systemctl restart postfix 後以 postqueue -f 重新發送。

在 WordPress 及應用程式設定 SMTP

網站及應用程式大多有 SMTP 設定欄,毋須在伺服器設置 Postfix,可直接連接發送服務。WordPress 安裝 SMTP 外掛並填入以下數值,會員註冊及找回密碼郵件便經該服務發出。

  • SMTP 主機:發送服務位址
  • 加密:587 號用 TLS(STARTTLS),465 號用 SSL
  • 連接埠:587 或 465
  • 驗證:啟用,輸入用戶名稱及密碼
  • 寄件人地址:你網域的地址(例如 no-reply@example.com)

Node.js、PHP、Python 應用程式亦以相同數值設定郵件程式庫。密碼不要直接寫在程式碼,以環境變數或設定檔放入最整潔。WordPress 安裝見WordPress 安裝指南。

在網域 DNS 加入 SPF、DKIM、DMARC

收件方郵件伺服器會以 DNS 記錄確認郵件是否真的來自你網域允許的地方。加入三項記錄,收件匣到達率會大幅提升。

  • SPF:可發送你網域郵件的伺服器清單。把發送服務提供的 include 值放入一項 TXT 記錄。
  • DKIM:附在郵件上的電子簽名。照樣加入發送服務畫面產生的 TXT 或 CNAME 記錄。
  • DMARC:決定如何處理 SPF 及 DKIM 確認失敗的郵件。一開始如下以只接收報告的設定起步。
DNS TXT
_dmarc.example.com  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

數週內查看報告、確認所有郵件均通過後,提升至 p=quarantine,再到 p=reject,防止網域被冒充。

接收郵件與下一步

想接收寄到你網域的郵件,請在網域加入郵件寄存服務的 MX 記錄。收件交給郵件寄存、發出的通知郵件交給發送服務,伺服器便可專注於網站及應用程式。

以郵件發送服務發信的方式,即使遷移或新建伺服器,只需搬移幾行設定便可延續。伺服器 IP 更改,發送信譽亦照樣留在服務方,把網站遷到其他地區時郵件到達率亦不受影響。

其他連接埠可按服務自由開放使用。只開放使用連接埠的方法見基本防火牆指南,伺服器使用規則見使用政策。

值得一併查看的指南

接續此指南最好一併完成的設定。

查看所有指南