本地郵件傳輸協(xié)議:SMTP和LMTP
SMTP需要管理一個隊列,一個郵件操作可以把一封郵件發(fā)送向不同的接收者,而一個SMTP命令卻只有一個返回碼,這就帶來的問題,如果服務(wù)器需要把一個郵件發(fā)向兩個接收者,發(fā)送第一個的時候成功了,而發(fā)送第二個時候暫時失敗了,服務(wù)器必須把這封郵件放入隊列,以后再發(fā)送,而發(fā)送方卻不可能知道這一切。
SMTP的這種隊列機制在最初設(shè)計時是為了考慮到轉(zhuǎn)發(fā)的需要,但在有些時候,并不需要服務(wù)器管理這個隊列,而需要由客戶進(jìn)行隊列的管理,我們看一下下面這個例子:
上圖中有三個獨立的通信系統(tǒng),三個方框內(nèi)的就是,第一個是隊列管理器,它是一個通常的SMTP服務(wù)器,第二個是使用非SMTP協(xié)議的郵件系統(tǒng),郵件在這個系統(tǒng)內(nèi)的傳送由系統(tǒng)中的服務(wù)器來決定,而第三個是將郵件放入到一個郵件池的系統(tǒng)。可能用戶希望將SMTP用于本地進(jìn)程內(nèi)通信通道,從隊列管理器到傳送代理間傳送信息。如果需要傳輸代理管理它們自己的郵件隊列就太麻煩了。
將郵件從本地傳輸代理傳向隊列管理器時使用LMTP不會有什么好處,但是在隊列管理器傳送郵件到本地傳輸代理時使用LMTP卻十分有好處,因為這樣接收者的郵件分別發(fā)送,而一封信件可以得到多個應(yīng)答,這個應(yīng)答指示相應(yīng)的郵件是不是正確發(fā)送到接收者了。
LMTP協(xié)議與SMTP和ESMTP協(xié)議很象,除了本文內(nèi)說明的一些命令改變外,其它和SMTP都一樣。一個成功的RCPT命令被定義為返回確認(rèn)完成應(yīng)答碼的RCPT命令。請注意:一般的成功命令都以2開頭。為了避免和SMTP和ESMTP服務(wù)混淆,LMTP使用LHLO命令開始一個LMTP會話,它的基本語法和HELO和EHLO命令相同。對于DATA命令來說,如果RCPT命令失敗,DATA命令必須返回503,并失敗。每個DATA命令碰到"."時,服務(wù)器必須對所有成功的RCPT命令返回應(yīng)答,這和平常的SMTP系統(tǒng)不同,而且順序必須和RCPT成功的順序一致,即使對于同一個向前路徑來說有許多RCPT命令,也必須返回多個成功應(yīng)答。這就意味著,服務(wù)器返回的確認(rèn)應(yīng)答是指服務(wù)器把郵件地發(fā)送到接收者或另一個轉(zhuǎn)發(fā)代理,這一點一定要明確。下面是一個例子:(S代表服務(wù)器,C代表客戶)
- S: 220 foo.edu LMTP server ready //服務(wù)器準(zhǔn)備好
- C: LHLO foo.edu
- S: 250-foo.edu
- S: 250-PIPELINING
- S: 250 SIZE
- C: MAIL FROM:
- S: 250 OK
- C: RCPT TO:
- S: 250 OK
- C: RCPT TO:
- S: 550 No such user here
- C: RCPT TO:
- S: 250 OK
- C: DATA
- S: 354 Start mail input; end with . //開始輸出郵件內(nèi)容,以回車,"."和回車結(jié)束
- C: Blah blah blah... //郵件內(nèi)容
- C: ...etc. etc. etc. //郵件內(nèi)容
- C: .
- S: 250 OK
- S: 452 is temporarily over quota
- C: QUIT //退出
- S: 221 foo.edu closing connection //關(guān)閉連接
請注意:上面例子中的服務(wù)器和客戶的域名是相同的,這是因為服務(wù)器和客戶是同一個郵件系統(tǒng)的不同子系統(tǒng)。這里只介紹對于SMTP服務(wù)的相應(yīng)內(nèi)容,對于ESMPT的內(nèi)容請參閱其它資料。
我們一定要清楚,LMTP和SMTP是不同的協(xié)議(雖然語法很象),所以它不能使用TCP端口25。服務(wù)器實現(xiàn)中必須實現(xiàn)PIPELINING和ENHANCEDSTATUSCODES ESMTP,也必須實現(xiàn)8BITMIME擴展功能。
如果對于服務(wù)器來說,它能夠快速響應(yīng)向多個接收者傳輸郵件的要求,而且它能夠給出多個應(yīng)答時,不要使用LMTP協(xié)議;
不要在廣域網(wǎng)上使用LMTP協(xié)議;
服務(wù)器必須盡快返回應(yīng)答;
客戶必須在應(yīng)答到達(dá)時處理,而不要在所有應(yīng)答均到達(dá)時才處理,如果對于某此接收者的確認(rèn)應(yīng)答在關(guān)閉連接后到達(dá),應(yīng)該把這些應(yīng)答看做是暫時失敗應(yīng)答。
SMTP和LMTP是兩個常用的本地郵件傳輸協(xié)議,在日常的應(yīng)用中,你一定會碰到這兩個協(xié)議,所以希望你能掌握。
























