最近需要一台能每日 Send 幾百個 Email,而且能接收彈信的 Server。
各大 Email Provider 都不支援自定 Return-Path,而且有發送限制。
因為要寫的不是普通 Newsletter,所以只好自己架一台 Mail Server。
於是開始研究起 Linux 下 Mail Server 相關的知識,原本相當複雜。
發出一封不易被扔進 Spam 的 Email 也非易事啊…
這篇先記下一些 Mail Server 的基礎知識。
2016-04-26: 修正格式, 新增比喻
– 一些 Terminology
- MUA – Mail User Agent
就是 Outlook, Thunderbird 之類的程式
比喻: 就是您家的工人, 幫您把郵件投進郵筒 - MSA – Mail Submission Agent
接收來自 MUA 的郵件,通常與 MTA 為同一軟件套件
比喻: 就是郵筒 - MTA – Mail Transfer Agent
把來自 MSA 的郵件轉送給其他 MTA,或到達目的地後轉給 MDA
比喻: 就是郵車, 把郵件送到其他郵局 - MDA – Mail Delivery Agent
把來自 MTA 的郵件分給 User (例如開放 POP3/IMAP 連接)
比喻: 就是郵差, 把郵差送到收件者手上
(From Wikipedia)
圖中未顯示的兩個概念:
- LDA – Local Delivery Agent
MDA 的本地版,把來自 MTA 的郵件分給 Local User (例如 Unix User)
比喻: 郵政信箱 - MRA – Mail Retrieval Agent
從 MDA 收信,通常跟由 MUA 同時擔任
比喻: 就是您家的工人, 把幫您把郵件由信箱拿回家
– Windows 下的 SMTP
平常使用 Windows 開發 PHP 程式, PHP for Windows 預設的 mail function 是連接 localhost:25
而很多現成的 Script 預設並 Email 的設定,只是直接呼叫 mail()
於是 Windows 下的開發機 mail() 就直接失敗,為此我裝上了 hMailServer
一個很簡單的 SMTP Server (相對於 Postfix)來處理 localhost:25 的連接。
這下了可奇怪,公司的電腦可以瞬間完成發送,而家中的連接很久然後 timeout。
最後發現原來是香港的 HKBN 家用寬頻封鎖了 25 Port 對外連接。
原來 SMTP 協議中,Port 25 本來是同時用作收信 (別的 MTA 送來信件) 及 發信 (MUA 委托 MSA 發出信件, 又稱 Relay)
很多 ISP 為了防止有人用家用寬頻作發出 Spam Mail,於是封鎖了 25 Port 對外連接。
這樣家用寬頻的連線一來就不能做 MTA 了。
– SMTP Port
至於 MUA 發信 (Relay) 也是用 Port 25 怎麼辦?
原來 SMTP 有定義另一個 Port 587 專做 Mail Submission (MSA)。
而 587 Port 的連接並不能讓 MTA 發信給另一個 MTA。
Wikipedia: Simple Mail Transfer Protocol – http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
– Linux 下的 Mail Server 套件
最常見的應該是 Sendmail 、Postfix 和 qmail。
Postfix的出現是為了解決 Sendmail 設定困難的問題 (雖然它都不見得容易設定)
qmail 我還沒有研究,聽聞是最易安裝設定的一個。
最後我選擇了 Postfix,因為它看似資源比較多。
Postfix 在上述的 Roles 擔當了 MSA, MTA 的角色 (頂多還有 LDA)
所以只安裝 Postfix 是沒法開啟 POP3/IMAP 給 Outlook 收信的
還需要安裝其他 MDA (例如 Dovecot)
– 相關 Ports
SMTP – 25
SMTPS (MSA) – 465
SMTP (MSA) – 587
IMAP – 143
IMAPS – 993
POP3 – 110
POP3S – 995
[本篇暫完,以後再補充]
內容十分實用,謝謝分享。