Ubuntu Postfix Mail Server 設定筆記 (前篇)

最近需要一台能每日 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

[本篇暫完,以後再補充]

One Reply to “Ubuntu Postfix Mail Server 設定筆記 (前篇)”

Leave a Reply

Your email address will not be published.