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