為什麼用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步. 安裝
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 驗證的郵件。一開始像下面這樣,從只接收報告的設定開始。
_dmarc.example.com TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"觀察幾週報告,確認所有郵件都能透過後,升級為 p=quarantine,再升級為 p=reject,防止網域被冒用。
接收郵件與下一步
想接收發往自己網域的郵件,就在網域中新增郵件託管服務的 MX 記錄。收件交給郵件託管,發出的通知郵件交給傳送服務,伺服器就能專注於網站和應用。
採用郵件傳送服務的方式,遷移或新建伺服器時只需搬幾行設定即可延續。即使伺服器 IP 變了,傳送信譽仍保留在服務方,把網站遷到其他地區時郵件送達率也保持穩定。
