Postfix里的POP與Imap介紹
許多用戶常誤以為收信與寄信是同一套軟件在工作,其實不然。讓用戶能從郵箱取走郵件的協(xié)議是IMAP與pop,而postfix的職責(zé)是將收下的郵件放入郵箱。也就是說,pop/imap服務(wù)是由postfix之外的軟件所提供的。提供pop/imap服務(wù)的軟件很多,包括 popper、wu imap kit等。
postfix與pop/imap servers
postfix 與pop/imap server之間得合作相當(dāng)簡單。每當(dāng)postfix收下本地郵件,就將郵件封存在郵箱里。當(dāng)pop/imap server收到用戶的要求時,只要從同樣的郵箱取出郵件即可。postfix與pop/imap server雙方都必須同意使用相同得郵箱格式以及相同得鎖定機制。postfix可搭配任何使用傳統(tǒng)郵箱格式得標(biāo)準(zhǔn)POP/IMAP server。你可能會想要調(diào)整mail_spool_directory參數(shù),但是對于大多數(shù)得POP/IMAP SERVERS而言,只要按照標(biāo)準(zhǔn)安裝指示安裝并啟動服務(wù)器即可。對于不支持傳統(tǒng)郵件格式的pop/imap servers而言,postfix扔可以使用“本地郵件傳輸協(xié)議”來投遞郵件,由POP/IMAP SERVER自己將郵件存入郵箱。
本地郵件傳輸協(xié)議(LMTP)
某 些pop/imap servers使用非標(biāo)準(zhǔn)的郵箱格式。很顯然的,沒道理要求postfix之類的MTA必須認識多種不同的專屬格式。因此,我們需要一種無關(guān)郵件格式的傳 輸渠道,讓郵件能從某個郵件程序傳到同機器上的另一個郵件程序,這個渠道便是LMTP。LMTP可說是smtp的精簡版。LMTP SERVER同樣有權(quán)決定是否要收下或拒收郵件,不過,LMTP SERVER不負責(zé)處理無法立刻投遞的郵件。
當(dāng)MTA傳遞一封多收件人的郵件給 SMTP server時,若有部分收件人因故不能收下郵件,則smtp server要負責(zé)將郵件排入隊列以便下次傳送,并對LMTP client宣稱投遞任務(wù)已經(jīng)成功。然而,LMTP server不承擔(dān)這樣的責(zé)任,也就是說,每一位收件人的投遞狀況都必須個別回復(fù)給LMTP client知道。對于無法投遞的收件人,他們的郵件是放在LMTP client的隊列里,由LMTP client負責(zé)后續(xù)的處理過程。
LMTP 的對話可能發(fā)生在同一機器上的不同郵件子系統(tǒng)之間,或是同一局域網(wǎng)上的不同機器之間。但是,如果對話雙方中間隔著廣域網(wǎng)路,就不保證LMTP一定可靠,因 為此協(xié)議是以響應(yīng)速度的快慢與否來判斷郵件是否順利送達。SMTP已經(jīng)被發(fā)現(xiàn)其收信與送信系統(tǒng)之間有一個同步化問題,偶爾會導(dǎo)致郵件被重復(fù)傳遞。乳溝 LMTP的對話雙方居廣域網(wǎng)絡(luò)的兩端,相信問題會更嚴重。
注意: LMTP除了可讓MTA用來將郵件投遞到非標(biāo)準(zhǔn)格式的郵箱,其真正的好處是讓郵件管理人員可以架設(shè)出容易擴展且可靠的郵件系統(tǒng)。比方說,對于郵件量很大的 站點,可以架設(shè)一臺或多臺postfix servers專門接收來自Internet的郵件,然后投遞給多個LMTP后臺系統(tǒng)。當(dāng)郵件量提升時,只要多架設(shè)幾臺前臺或后臺系統(tǒng)即可。
POSTFIX與CYRUS IMAP
Cyrus IMAP是專門提供POP/IMAP服務(wù)的服務(wù)器,用戶不需要系統(tǒng)賬戶。如果你想要為系統(tǒng)現(xiàn)有的用戶架設(shè)郵件服務(wù)器,或許應(yīng)該考慮其他比較簡單的 POP/IMAP解決方案,像Qualcomm的Qpopper(只有pop功能),或是University of Washington的IMAP Toolkit,這兩套軟件都不需要你在postfix進行任何特殊設(shè)定。
Cyrus IMAP提供兩種LMTP投遞渠道,分別是Unix-domain socket與TCP socket。你必須知道Cyrus IMAP使用哪一種渠道,才可以適當(dāng)設(shè)定postfix。如果使用Unix-domain socket,則postfix與Cyrus IMAP server兩者都必須在同一臺機器上;如果使用TCP socket,則postfix與Cyrus IMAP server可以在同一臺機器上,也可以分居于局域網(wǎng)絡(luò)上的不同主機。postfix的LMTP投遞參數(shù)定義在main.cf配置文件的 transort_maps參數(shù)中。
要讓postfix收下投遞給本地Cyrus IMAP server的郵件,則收件地址的網(wǎng)域名稱必須被列在mydestination參數(shù)。接著,你必須要求postfix將郵件交給Cyrus IMAP。使用mailbox_transport、local_transport或fallback_transport參數(shù)可讓postfix知 道,在郵件交給Cyrus之前,要進行多少道本地投遞手續(xù)。如果你使用了local_transport或fallback_transport,請將 Cyrus的所有用戶名稱寫在local_recipient_maps參數(shù)所指的一個查詢表里,以免postfix拒收cyrus用戶的郵件。
mailbox_transport
郵件先交給local MDA,由local檢查別名文件與.forward文件,并展開收件人的郵件地址。經(jīng)過處理后的郵件會被轉(zhuǎn)交給postfix的LMTP client,由它負責(zé)投遞道LMTP server。
local_transport
當(dāng)LMTP用于本地傳輸時,郵件會被直接交給postfix LMTP client,原本負責(zé)處理本地郵件的local MDA完全不插手。因此,別名文件與.forward文件都沒有作用。
fallback_transport
當(dāng)LMTP用于備用傳輸時,postfix會先將郵件交給local MDA處理,執(zhí)行別名文件與.forward文件的展開操作。如果收件人有一個正常的系統(tǒng)賬戶,則郵件會被投遞到系統(tǒng)上的適當(dāng)郵箱;如果收件人沒有系統(tǒng)賬 戶,則郵件會被交給postfix LMTP clenet,由它負責(zé)將郵件交給LMTP server。當(dāng)你的郵件服務(wù)器同時以自己的系統(tǒng)賬戶服務(wù)一群用戶,而同時又代收另一群Cyrus IMAP server用戶的郵件時,就需要以fallback_transport機制來進行LMTP投遞操作。
使用下列格式來設(shè)定你所選的投遞機制:
xxx_transport = service:socket_type[:/path/to/socket]
對于LMTP投遞操作而言,service必須為lmtp(代表/etc/postfix/master.cf)所定義的lmtp服務(wù), socket_type必須是unix(代表unix-domain socket)或inet(代表tcp socket)兩者之一。默認值為inet,這表示postfix架設(shè)你的lmtp server是使用tcp socket來收信。因此,如果默認值符合你的需求,你只要這樣設(shè)定就可以了:
local_transport = lmtp
如果使用local_transport與unix-domain socket,在/etc/postfix/main.cf中應(yīng)該做這樣的設(shè)定:
local_transport = lmtp:unix:/var/imap/sockte/lmtp
#p#
postfix與cyrus imap的搭配實例
cyrus imap使用春雨如絲sasl函數(shù)庫來驗證用戶的身份,所以,你必須先構(gòu)建、安裝cyrus sasl函數(shù)庫,然后才可以順利構(gòu)建cyrus imap server。此外,cyrus軟件至少需要berkeley db 3以上的版本,如果你系統(tǒng)
上的Berkeley DB比第三版還舊,你可能需要全面更新整個系統(tǒng)。在同一個系統(tǒng)上混用不同版本的Berkeley DB,可能會引發(fā)難以追查的問題。如果你必須升級DB函數(shù)庫,建議你重建所有需要用到的Berkeley DB的軟件,讓系統(tǒng)上的所有軟件都使用同版函數(shù)庫。
為了舉例說明,架設(shè)我們已經(jīng)架設(shè)好一個能接收example.com網(wǎng)域郵件的postfix server,并以同一臺機器來運行Cyrus IMAP server。假設(shè)所有郵件用戶的賬戶都已經(jīng)建在Cyrus SASL的數(shù)據(jù)庫里,但是這臺機器上仍有少數(shù)幾個shell賬戶。雖然這些賬戶不會被用來收信,但是我們希望仍然能夠使用.foward文件與別名文件, 以便系統(tǒng)產(chǎn)生給root的郵件以及外界寄給postmaster別名的郵件,都可以被轉(zhuǎn)寄到正確的地方。
很顯然的,我們不能直接將所有郵件都直接交付給Cyrus IMAP server(所以應(yīng)該排除local_transport),因為我們?nèi)有枰猯ocal MDA的別名文件與.forward文件的展開功能(所以只剩下mailbox_transport與fallback_transport可以選擇)。 但由于shell賬戶不是用來收信的,所以,最理想的選擇是mailbox_transport。我們應(yīng)該將此參數(shù)指向lmtp MDA,并確定master.cf里的lmtp服務(wù)能將郵件投遞給Cyrus IMAP server。以下是我們的設(shè)定步驟:
1、將Cyrus IMAP安裝到系統(tǒng)上。檢查Cyrus的配置文件(通常是/etc/cyrus.conf),確定它的服務(wù)渠道是Unix-domain socket,并記下socket文件的位置。你應(yīng)該會看到類似下面這樣的內(nèi)容:
SERVICES {
# add or remove based on preferences
imap cmd="imapd" listen="imap" prefork=0
pop3 cmd="pop3d" listen="pop3" prefork=0
# LMTP is required for delivery
lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0
}
其中,“lmtpunix”那一行就是socket文件的正確位置。
2、依照Cyrus隨附文件的指示,在服務(wù)器上設(shè)置一個供Cyrus IMAP server使用的系統(tǒng)賬戶。
3、檢查/etc/postfix/master.cf的內(nèi)容,確定lmtp服務(wù)的配置符合你的系統(tǒng)環(huán)境。一般而言,你應(yīng)該像這樣設(shè)定:
lmtp unix - - n - - lmtp
如果你的postfix是以默認模式安裝的,上面這一行應(yīng)該已經(jīng)出現(xiàn)在你的/etc/postfix/master.cf配置文件里了。要注意的是第五 欄,它代表lmtp MDA是否要處于chroot環(huán)境下。在本例中,由于它必須要能夠讀取Cyrus IMAP server的socket文件,所以此欄設(shè)定為n
4、檢查main.cf,確定mydestination參數(shù)所列的網(wǎng)域包含了你要的收信網(wǎng)域。你可以直接列出。
5、要求mailbox_transport使用master.cf所指定的lmtp服務(wù),并指向你先前記下的Cyrus IMAP socket文件
6、重新加載postfix
通過上文我們知道了一些postfix 與pop/imap的知識,希望對大家有所幫助!
【編輯推薦】
- 如何安裝PostfixAdmin
- Postfix的郵件隊列管理
- Postfix中的地址操作大全
- Sendmail 配置E-Mail服務(wù)器開啟SMTP、POP端口
- 分析PHP函數(shù)array_pop()的具體使用方式
- Perl Pop和Perl Push操作異同之處
- Courier imap 安裝指南
- Thunderbird設(shè)置IMAP接收gmail過程
- COURIER-imap安裝并創(chuàng)建rpm環(huán)境