圖文并茂 Postfix如何接收郵件
當一封郵件進入Postfix郵件系統(tǒng)后,首先被放入incoming queue(入口隊列). 下圖體現(xiàn)了處理一封新郵件涉及的主要進程和順序。 帶數(shù)字的名稱代表Postfix的命令或服務程序,不帶數(shù)字的名稱代表Postfix的郵件隊列。
網(wǎng)絡郵件通過 smtpd(8) 或 qmqpd(8) 服務器進入Postfix,這兩個服務刪除郵件的SMTP或QMQP協(xié)議封裝(去掉協(xié)議頭,又叫解封),并且強制進行一些郵件健康檢查(sanity checks)來保護Postfix,然后將郵件的發(fā)送者、接收者地址和郵件內(nèi)容交給cleanup(8)服務處理??梢酝ㄟ^配置 smtpd(8)服務來阻塞服務器不想接收的郵件,具體的配置方法可以參看:SMTPD_ACCESS_README 。
本機發(fā)送的郵件是由Postfix自帶的 sendmail(1)兼容性命令來處理,并且被特權命令postdrop(1) 放入 maildrop queue隊列中進行排隊,這種方式使得即使Postfix郵件系統(tǒng)沒有運行也能正常工作(本機能夠發(fā)送郵件,只不過發(fā)送完的郵件必須在maildrop queue中,直到Postfix郵件系統(tǒng)啟動才能被發(fā)送出去。但對用戶來講,不必關心郵件什么時候被發(fā)送出去。)。 本地的 pickup(8)服務從maildrop queue中讀取本機發(fā)送的郵件,并且強制進行一些郵件健康檢查(sanity checks)來保護Postfix,然后將郵件的發(fā)送者、接收者地址和郵件內(nèi)容交給cleanup(8)服務處理。
內(nèi)部(Postfix郵件系統(tǒng)本身)發(fā)送來的郵件直接被提交給cleanup(8)服務來處理,這部分沒有包括在上面的圖示中。所謂內(nèi)部發(fā)送的郵件主要包括:被local(8)投遞代理轉發(fā)的郵件(參看下一小節(jié))、被bounce(8)服務(參看下一小節(jié))返回給發(fā)送者的郵件以及postmaster關于Postfix系統(tǒng)問題的通知。
cleanup(8)服務進行郵件進入隊列(incoming queue)前的最后一次處理,它將增加一些丟失的消息頭、按照地址轉換規(guī)則(參看 ADDRESS_REWRITING_README)重寫郵件地址。另外,cleanup(8)服務可以使用正則表達式配置為輕量級的內(nèi)容檢查器,請參看:BUILTIN_FILTER_README 。 cleanup(8)服務將處理完的郵件以單個文件的方式放入 incoming queue隊列,并通知隊列管理器有新郵件到達。
trivial-rewrite(8)服務將郵件地址(發(fā)送者)重寫為標準的郵件地址格式:"user@fully.qualified.domain",參看:ADDRESS_REWRITING_README 。Postfix當前版本本身不執(zhí)行地址重寫語言(rewriting language),但是大多數(shù)情況下我們可以通過表查找或正則表達式來實現(xiàn)。
【編輯推薦】