postfix郵件的接收和投遞過程
postfix是Wietse Venema在IBM的GPL協(xié)議之下開發(fā)的MTA(郵件傳輸代理)軟件。試圖更快、更容易管理、更安全,同時(shí)還與sendmail保持足夠的兼容性。postfix郵件收發(fā)和投遞過程更是具有人性化。
一、接收郵件的過程
當(dāng)postfix接收到一封新郵件時(shí),新郵件***在incoming隊(duì)列處停留,然后針對(duì)不同的情況進(jìn)行不同的處理:
1.對(duì)于來自于本地的郵件:sendmail進(jìn)程負(fù)責(zé)接收來自本地的郵件放在maildrop隊(duì)列中,然后pickup進(jìn)程對(duì)maildrop中的郵件進(jìn)行完整性檢測。maildrop目錄的權(quán)限必須設(shè)置為某一用戶不能刪除其他用戶的郵件。
2.對(duì)于來自于網(wǎng)絡(luò)的郵件:smtpd進(jìn)程負(fù)責(zé)接收來自于網(wǎng)絡(luò)的郵件,并且進(jìn)行安全性檢測。可以通過UCE(unsolicitedcommercialemail)控制smtpd的行為。
3.由postfix進(jìn)程產(chǎn)生的郵件:這是為了將不可投遞的信息返回給發(fā)件人。這些郵件是由bounce后臺(tái)程序產(chǎn)生的。
4.由postfix自己產(chǎn)生的郵件:提示postmaster(也即postfix管理員)postfix運(yùn)行過程中出現(xiàn)的問題。(如SMTP協(xié)議問題,違反UCE規(guī)則的記錄等等。)關(guān)于cleanup后臺(tái)程序的說明:
cleanup是對(duì)新郵件進(jìn)行處理的***一道工序它對(duì)新郵件進(jìn)行以下的處理:添加信頭中丟失的Form信息;
為將地址重寫成標(biāo)準(zhǔn)的user@fully.qualified.domain格式進(jìn)行排列;
重信頭中抽出收件人的地址;
將郵件投入incoming隊(duì)列中,并請(qǐng)求郵件隊(duì)列管理進(jìn)程處理該郵件;
請(qǐng)求trivial-rewrite進(jìn)程將地址轉(zhuǎn)換成標(biāo)準(zhǔn)的user@fully.qualified.domain格式。
二、投遞郵件的過程
新郵件一旦到達(dá)incoming隊(duì)列,下一步就是開始投遞郵件,postfix投遞郵件時(shí)的處理過程如圖三所示。相關(guān)的說明如下:郵件隊(duì)列管理進(jìn)程是整個(gè)postfix郵件系統(tǒng)的心臟。它和local、smtp、pipe等投遞代理相聯(lián)系,將包含有隊(duì)列文件路徑信息、郵件發(fā)件人地址、郵件收件人地址的投遞請(qǐng)求發(fā)送給投遞代理。隊(duì)列管理進(jìn)程維護(hù)著一個(gè)deferred隊(duì)列,那些無法投遞的郵件被投遞到該隊(duì)列中。除此之外,隊(duì)列管理進(jìn)程還維護(hù)著一個(gè)active隊(duì)列,該隊(duì)列中的郵件數(shù)目是有限制的,這是為了防止在負(fù)載太大時(shí)內(nèi)存溢出。郵件隊(duì)列管理程序還負(fù)責(zé)將收件人地址在relocated表中列出的郵件返回給發(fā)件人,該表包含無效的收件人地址。
如果郵件隊(duì)列管理進(jìn)程請(qǐng)求,rewrite后臺(tái)程序?qū)κ占说刂愤M(jìn)行解析。但是缺省地,rewrite只對(duì)郵件收件人是本地的還是遠(yuǎn)程的進(jìn)行區(qū)別。如果郵件對(duì)你管理進(jìn)程請(qǐng)求,bounce后臺(tái)程序可以生成一個(gè)郵件不可投遞的報(bào)告。本地投遞代理local進(jìn)程可以理解類似UNIX風(fēng)格的郵箱,sendmail風(fēng)格的系統(tǒng)別名數(shù)據(jù)庫和sendmail風(fēng)格的.forward文件??梢酝瑫r(shí)運(yùn)行多個(gè)local進(jìn)程,但是對(duì)同一個(gè)用戶的并發(fā)投遞進(jìn)程數(shù)目是有限制的。你可以配置local將郵件投遞到用戶的宿主目錄,也可以配置local將郵件發(fā)送給一個(gè)外部命令,如流行的本地投遞代理procmail。在流行的linux發(fā)行版本RedHat中,我們就使用procmail作為最終的本地投遞代理。遠(yuǎn)程投遞代理SMTP進(jìn)程根據(jù)收件人地址查詢一個(gè)SMTP服務(wù)器列表,按照順序連接每一個(gè)SMTP服務(wù)器,根據(jù)性能對(duì)該表進(jìn)行排序。在系統(tǒng)負(fù)載太大時(shí),可以有數(shù)個(gè)并發(fā)的SMTP進(jìn)程同時(shí)運(yùn)行。pipe是用于UUCP協(xié)議的投遞代理。以上介紹postfix郵件。
【編輯推薦】