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 變了,傳送信譽仍保留在服務方,把網站遷到其他地區時郵件送達率也保持穩定。

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

推薦一起閱讀的指南

接著本指南做好會更好的設定。

檢視全部指南