Sun logo      上一個      目錄      索引      下一個     

Sun ONE Messaging Server 6.0 管理員指南

第 12 章
LMTP 遞送

Sun™ ONE Messaging Server 的 MTA 可以在使用多層郵件傳送伺服器佈署的情況下使用 LMTP (本地郵件傳送協定,在 RFC 2033 中定義) 向郵件儲存遞送郵件。在這些情況下,您使用內送中繼器和後端郵件儲存時,中繼器將負責位址延伸和遞送方法 (如自動回覆和轉寄) 以及郵件收件人清單的延伸。以前,遞送至後端儲存的作業使用 SMTP,這需要後端系統在 LDAP 目錄中再次查找收件者位址,從而使用 MTA 的整個機制。為了提昇速度和效率,MTA 可以使用 LMTP (而不是 SMTP) 將郵件遞送至後端儲存。Sun ONE Messaging Server 的 LMTP 伺服器不是用作一般目的 LMTP 伺服器,而是用作中繼器和後端郵件儲存之間的專用協定。為簡化論述,將使用涉及兩層佈署的範例。


依設計,LMTP 適合在多層佈署中使用。不可能將 LMTP 與單一系統佈署配合使用。


本章包含以下各節:


LMTP 遞送功能

MTA 的 LMTP 伺服器能夠更有效率地將郵件遞送至後端郵件儲存,因為它:


不使用 LMTP 的兩層佈署中的郵件傳送處理

圖 12-1 以圖形格式展示了不使用 LMTP 的兩層佈署方案中郵件處理的以下說明。

圖 12-1  不使用 LMTP 的兩層佈署

圖 12-1 以圖形格式展示了不使用 LMTP 的兩層佈署方案中郵件處理的以下說明。

在不使用 LMTP 的情況下,在儲存系統前面帶有中繼器的兩層佈署中,內送郵件的處理從 SMTP 連接埠上的連線開始,該連線由中繼器上的派送程式選取並傳送至 tcp_smtp_server 程序。此程序對內送郵件執行一系列處理,包括:

然後,smtp_client 程序從佇列中選取郵件並將其傳送至郵件主機。在郵件主機上,將發生某些非常類似的處理。派送程式將選取 SMTP 連接埠上的連線並將其傳送至 tcp_smtp_server 程序。此程序對郵件執行一系列處理,包括:

然後,ims_ms 程序將選取郵件並嘗試將其遞送至儲存。

在這種情況下,形成佇列處理會執行兩次,並且每個 MTA 均執行一次 LDAP 查找。


使用 LMTP 的兩層佈署中的郵件傳送處理

圖 12-2 以圖形格式展示了帶有 LMTP 的兩層佈署方案中郵件處理的以下說明。

圖 12-2  帶有 LMTP 的兩層佈署

圖 12-2 以圖形格式展示了帶有 LMTP 的兩層佈署方案中郵件處理的以下說明。

在 LMTP 就位的情況下,派送程式將選取中繼器的 SMTP 連接埠上的連線並將其傳送至 tcp_smtp_server 程序。此程序對內送郵件執行一系列處理,包括:

將格式為 user@domain.LMTPuser@domain.LMTPNATIVE 的位址分別經由 tcp_lmtp 通道或 tcp_lmtpnative 通道路由至郵件儲存系統。這些通道使用 LMTP (而不是 SMTP) 與後端郵件儲存通訊。在儲存機器上,派送程式將接收與 LMTP 連接埠的連線並將其傳送至 lmtp_server 程序。然後,LMTP 伺服器將郵件插入使用者的電子信箱或 UNIX 的原生電子信箱。如果郵件遞送成功,將從中繼器上被移出佇列。如果失敗,郵件將保留在中繼器上。請注意,郵件儲存上的 LMTP 程序不使用任何 MTA 工具處理位址或郵件。


LMTP 簡介

大多數情況下,MTA 本身可以不在後端伺服器上。唯一需要的 MTA 元件是:

當派送程式需要 MTA 配置檔案時,這些檔案可以非常短。派送程式必須在後端伺服器上執行,以便可以啟動在其下執行的 LMTP 伺服器。由於派送程式和 LMTP 伺服器使用 libimta 的各種功能,因此也需要將其顯示在後端伺服器上。

LMTP 伺服器不執行任何一般的 MTA 形成佇列或移出佇列功能、標頭處理或位址轉換。中繼器系統執行郵件和位址內容的所有處理,然後將這些郵件和位址顯示給 LMTP 伺服器,郵件格式應與要遞送至郵件儲存的郵件格式相同,並且遞送位址已是儲存所需的格式。通常在郵件遞送至儲存時可獲得的其他收件者資訊 (如使用者的配額) 將與收件者位址一起顯示為 LMTP 參數。如果遞送嘗試失敗,郵件將保留在中繼器系統的 LMTP 佇列中。


已實施的 LMTP 協定

本節提供 LMTP 對話範例,並提供該對話中顯示的說明。中繼器上的 LMTP 用戶端使用標準 LMTP 協定與後端儲存上的 LMTP 伺服器對話。但是,該協定要以特定方式使用。例如:

---> LHLO
<--- 250 OK

LHLO 訊息沒有採取任何動作。回覆始終是 250 OK

---> MAIL FROM:address size=messageSizeInBytes
<--- 250 OK

對創建者位址沒有進行任何檢查或轉換。size= 參數給出要遞送郵件的大小 (以位元組為單位)。此郵件大小與協定中顯示的郵件大小相同。郵件大小不必完全相同,但實際郵件大小不能超出此大小。LMTP 伺服器將按此大小分配記憶體緩衝區以接收郵件。

---> RCPT TO:uid+folder@domain xquota=size,number xdflg=xxx
<--- 250 OK

在收到收件者位址時不對其進行檢查,但是會建立一個收件者清單以便以後使用。請注意,對於主要網域中的 uids,位址的 @domain 部分可省略,+folder 部分是選擇性的。這與 MTA 中的郵件儲存通道所使用的位址格式相同。

xquota= 參數給出使用者的郵件配額,它包含郵件的最大總大小和最大數目。MTA 提供在對使用者執行 LDAP 查找以進行位址轉換時所擷取的資訊。此資訊用於使郵件儲存中的配額資訊與目錄保持同步。獲取配額資訊不會影響其他效能。

xdflg= 參數指定一個數字,該數字將被轉譯為位元欄位。這些位元控制遞送郵件的方式。例如,值為 2 的位元 (如果設定) 將確保郵件的遞送,即使使用者超出配額。

此互動作業可以重複多次,每個收件者一次。

--->DATA
---> <郵件文字>
--->.

然後 LMTP 用戶端將傳送整個郵件 (填滿點的),與 SMTP 的操作相同。郵件傳送完畢後,每行上將帶有一個點 (.)。如果超出郵件大小,LMTP 伺服器將傳送:

<--- 500 message too big

並結束連線。

假定郵件被正確接收,則 LMTP 伺服器會將 RCPT TO: 行中給定的每個收件者的狀態傳回至 LMTP 用戶端。例如,如果郵件遞送成功,則回應是:

<--- 250 2.5.0 address OK

其中,addressRCPT TO: 行中顯示的位址。

對話可以使用其他 MAIL FROM: 行重複,或使用以下互動作業結束:

---> quit
<--- 221 OK

表格 12-1 顯示每個收件者的可能狀態代碼。在此三欄表格中,第一欄顯示短代碼,第二欄顯示等效的長代碼,第三欄顯示狀態文字。2.x.x 狀態代碼是成功代碼,4.x.x 代碼是可重試錯誤,5.x.x 代碼是不可重試錯誤。

表格 12-1  收件者的 LMTP 狀態代碼  

短代碼

長代碼

狀態文字

250

2.5.0

確定

420

4.2.0

電子信箱被鎖定

422

4.2.2

超出配額

420

4.2.0

電子信箱格式錯誤

420

4.2.0

不支援的電子信箱

430

4.3.0

IMAP IOERROR

522

5.2.2

超出永久配額

523

5.2.3

郵件太大

511

5.1.1

電子信箱不存在

560

5.6.0

郵件包含無效字符

560

5.6.0

郵件包含 nl

560

5.6.0

郵件標頭錯誤

560

5.6.0

郵件無空行


配置 LMTP 遞送

配置 LMTP 遞送機制需要對中繼器和後端儲存均進行配置。在中繼器上,DELIVERY_OPTIONS MTA 選項 (在 option.dat 中) 必須變更,以便將要遞送至儲存的郵件傳送至 LMTP 通道。必須使用派送程式 (但不需要工作主控台) 配置後端儲存。必須配置派送程式以執行 LMTP 伺服器。

配置中繼器

預設配置適用於在同一系統上具有 MTA 和郵件儲存的伺服器。在這種情況下,為使用者的郵件儲存電子信箱定義的遞送方法將從使用者 ID 和託管網域建構一個位址,並將郵件路由至 ims_ms 通道。對於具有 LMTP 後端儲存的中繼器,必須配置該中繼器為使用者 (甚至是在其他系統上佈建的使用者) 處理郵件。此目的可透過將 # 置於大部分規則的前面來實現。必須進行的其他變更與必須在郵件儲存系統上由代理經由 LMTP 執行的方法相關。它們是郵件儲存電子信箱、原生 (和 UNIX) 以及檔案。

DELIVERY_OPTIONS 的值必須變更。遞送選項的目前預設是:

DELIVERY_OPTIONS=\
  *mailbox=$M%$\$2I$_+$2S@ims-ms-daemon,\
  &members=*,\
  *native=$M@native-daemon,\
  *unix=$M@native-daemon,\
  /hold=$L%$D@hold-daemon,\
  &file=+$F@native-daemon,\
  &@members_offline=*,\
  program=$M%$P@pipe-daemon,\
  #forward=**,\
  *^!autoreply=$M+$D@bitbucket

您必須將其變更為:

DELIVERY_OPTIONS=\
  #*mailbox=@$X.LMTP:$M$_+$2S%$\$2I@ims-ms-daemon,\
  #&members=*,\
  #*native=@$X.lmtpnative:$M,\
  #*unix=@$X.lmtpnative:$M,\
  #/hold=$L%$D@hold,\
  #*file=@$X.lmtpnative:+$F,\
  #&@members_offline=*,\
  #program=$M%$P@pipe-daemon,\
  #forward=**,\
  #*^!autoreply=$M+$D@bitbucket

請注意,所有遞送選項均有 # 字首字元,以便可以在中繼器節點上評估這些選項。否則,需要變更電子信箱、原生 (和 UNIX) 以及檔案的遞送選項。這些規則的目標是產生將導致郵件透過相應的 LMTP 通道被傳送至後端伺服器的位址。所產生的位址是以下格式的源路由位址:

@sourceroute:localpart@domain

這將導致郵件基於 sourceroute 被路由,但是顯示到遠端機器的位址將獨立於該路由。$X 替換將插入使用者的 mailhost 屬性值。產生的源路由 (mailhost.lmtpmailhost.lmtpn) 將匹配 .lmtp.lmtpn 規則,必須將這些規則加入 imta.cnf 檔案。這些路由可將郵件送到兩個 LMTP 通道之一,一個用於郵件儲存遞送,另一個用於原生遞送。這些重寫規則將去掉源路由中指定的網域名稱的 .lmtp.lmtpn 元件,以便郵件可以透過正確的 LMTP 通道遞送至正確的郵件主機。傳送至 LMTP 伺服器的位址由源路由位址右邊的替換型樣 (即,「:」後面的內容) 定義。對於電子信箱型樣,為 $M$_+$2S$\@$2I。它將成為使用者 ID,後跟「+」和資料夾名稱 (如果原始位址中有資料夾名稱),然後是「@」和託管網域 (除非網域是郵件佈署的主要網域)。請注意,檔案方法使用 lmtpnative 通道,但是該程式遞送方法將導致在中繼器上遞送。如果這不足以傳送郵件,您必須在後端伺服器上配置 MTA。這並不排除使用 LMTP,但這是另一個選項,將在後面有所描述。

請注意電子信箱遞送選項型樣的變更。另請注意,現在自動回覆遞送選項的前面已加上字元 # 以在中繼器上強制動作。另請注意,為使原生檔案和 Unix 檔案以及遞送方法有效,MTA 必須在目標機器上執行。

您必須修改 imta.cnf 檔案以在檔案的重寫規則部分包含 .lmtp* 重寫規則。例如:

! Rewrite rules
!
! lmtp
.lmtp $U%$H@lmtpcs-daemon
!
! lmtpn
.lmtpn $U%$H@lmtpcn-daemon

請注意,依預設,LMTP 重寫規則已被註釋。如果您要 LMTP 運作,必須取消註釋。

您還必須在 imta.cnf 檔案的通道定義部分包含 lmtplmtpn 通道的定義。例如:

! tcp_lmtpcs (LMTP client - store)
tcp_lmtpcs defragment lmtp port 225 nomx single_sys subdirs 20 maxjobs 7 pool SMTP_POOL dequeue_removeroute
lmtpcs-daemon

!
! tcp_lmtpcn (LMTP client - native)
tcp_lmtpcn defragment lmtp port 226 nomx single_sys subdirs 20 maxjobs 7 pool SMTP_POOL dequeue_removeroute
!lmtpcn-daemon


請確定在 LMTP 通道上使用 lmtp 通道關鍵字。請勿在 LMTP 通道上同時使用 smtplmtp 通道關鍵字。


請注意,依預設,LMTP 通道定義已被註釋。如果您要 LMTP 運作,必須取消註釋。

最後,您需要將 service.http.smtphost configutil 參數 (預設為 localhost) 設定為 LMTP 主機的機器名稱。若要向 Postmaster 傳送郵件,您還需要將 alarm.msgalarmnoticehost configutil 參數 (預設為 localhost) 設定為 LMTP 主機的機器名稱。

配置帶有 LMTP 但不帶 MTA 的後端儲存

如果後端儲存經由 LMTP 接收郵件,則不需要 MTA。這表示它們沒有工作主控台,且沒有任何位址重寫工具與 MTA 關聯。但是,它們仍需要派送程式和簡單的 MTA 配置。特別是,它們需要 dispatcher.cnf 檔案和 mappings 檔案,這兩個檔案將構成 MTA 配置的唯一重要部分。

dispatcher.cnf 檔案必須包含以下內容:

! rfc 2033 LMTP server - store
!
[SERVICE=LMTPSS]
PORT=225
IMAGE=IMTA_BIN:tcp_lmtp_server
LOGFILE=IMTA_LOG:tcp_lmtpss_server.log
PARAMETER=CHANNEL=tcp_lmtpss
STACKSIZE=2048000
! Uncomment the following line and set INTERFACE_ADDRESS to an appropriate
! host IP (dotted quad) if the dispatcher needs to listen on a specific
! interface (e.g. in a HA environment).
!INTERFACE_ADDRESS=
!
! rfc 2033 LMTP server - native
!
[SERVICE=LMTPSN]
PORT=226
IMAGE=IMTA_BIN:tcp_lmtpn_server
LOGFILE=IMTA_LOG:tcp_lmtpsn_server.log
PARAMETER=CHANNEL=tcp_lmtpsn
STACKSIZE=2048000
! Uncomment the following line and set INTERFACE_ADDRESS to an appropriate
! host IP (dotted quad) if the dispatcher needs to listen on a specific
! interface (e.g. in a HA environment).
!INTERFACE_ADDRESS=
!

請注意,依預設,dispatcher.cnf 檔案中的 LMTP 服務均已被註釋。您必須取消註釋,才能使 LMTP 運作。

還可以設定 MAX_CONNSMAX_PROCSMAX_LIFE_CONNSMAX_LIFE_TIME 的一般派送程式選項,但需要針對您的硬體進行相應設定。

PORT_ACCESS 對映很重要。後端伺服器的 LMTP 實施將用作 Sun ONE Messaging Server 中繼器和後端儲存之間的專用協定。您必須使用 PORT_ACCESS 對映以確保僅此類中繼器可以連線至這些服務。您的對映檔案應類似於:

PORT_ACCESS

  TCP|*|225|1.2.3.4|* $Y
  TCP|*|226|1.2.3.4|* $Y
  TCP|*|225|1.2.3.5|* $Y
  TCP|*|226|1.2.3.5|* $Y
  TCP|*|*|*|* $N500$ Do$ not$ connect$ to$ this$ machine

您應使用連線至後端儲存的網路上的中繼器 IP 位址取代此處 PORT_ACCESS 對映表中指定的範例 IP 位址。

必須有一個 imta.cnf 檔案,但它僅用於使配置完整。最小的 imta.cnf 檔案應包含以下通道定義:

! tcp_lmtpss (LMTP server - store)
tcp_lmtpss lmtp subdirs 20
tcp_lmtpss-daemon

!
! tcp_lmtpsn (LMTP server - native)
tcp_lmtpsn lmtp subdirs 20
tcp_lmtpsn-daemon

請注意,依預設,LMTP 通道定義已被註釋。如果您要 LMTP 運作,必須取消註釋。

配置中繼器以經由 LMTP 將郵件傳送至帶有郵件儲存和完整 MTA 的後端系統

在某些情況下,您可能希望後端儲存具有 MTA 的完整功能,但仍具有使用 LMTP 的載入保存功能。例如,您可能需要後端儲存上的程式遞送。在這種情況下,應按如上所述配置中繼器,以便中繼器可以使用 LMTP 傳送至後端儲存,但應具有 DELIVERY_OPTIONS 的以下內容:

DELIVERY_OPTIONS=\
  #*mailbox=@$X.LMTP:$M$_+$2S%$\$2I@ims-ms-daemon,\
  &members=*,\
  #*native=@$X.lmtpnative:$M,\
  #*unix=@$X.lmtpnative:$M,\
  /hold=$L%$D@hold,\
  #*file=@$X.lmtpnative:+$F,\
  &@members_offline=*,\
  program=$M%$P@pipe-daemon,\
  #forward=**,\
  #*^!autoreply=$M+$D@bitbucket

唯一不同的是,某些規則上沒有 # (在此機器上評估) 字首。對於 membersmembers_offline,這意味著如果沒有為郵件收件人清單定義 mailhost 屬性,邏輯將回復為舊邏輯,以便郵件收件人清單可以在中繼器上延伸。對於 hold,這意味著處於 .HELD 狀態的使用者的郵件將保留在後端儲存 (而不是各種中繼器) 上的保留佇列中。對於程式,這意味著請求的程式將在使用者的郵件主機上執行。

除了完整的 MTA,如果您還要在儲存系統上使用 SMTP 和 LMTP,則以下所示為您要使用的 DELIVERY_OPTIONS 設定。

DELIVERY_OPTIONS=\
  *mailbox=$M%$\$2I$_+$2S@ims-ms-daemon,\
  &members=*,\
  *native=$M@native-daemon,\
  hold=$M?$I@hold-daemon,\
  *unix=$M@native-daemon,\
  &file=+$F@native-daemon,\
  &@members_offline=*,\
  program=$M%$P@pipe-daemon,\
  forward=**,\
  *^!autoreply=$M+$D@bitbucket

在具有完整 MTA 的後端郵件儲存系統上配置 LMTP

從後端儲存郵件傳送系統的配置到使用 LMTP 直接遞送至儲存的配置的唯一變更是,需要將以下行加入 dispatcher.cnf 檔案的結尾:

! rfc 2033 LMTP server - store
!
[SERVICE=LMTPSS]
PORT=225
IMAGE=IMTA_BIN:tcp_lmtp_server
LOGFILE=IMTA_LOG:tcp_lmtpss_server.log
PARAMETER=CHANNEL=tcp_lmtpss
STACKSIZE=2048000
! Uncomment the following line and set INTERFACE_ADDRESS to an appropriate
! host IP (dotted quad) if the dispatcher needs to listen on a specific
! interface (e.g. in a HA environment).
!INTERFACE_ADDRESS=
!
! rfc 2033 LMTP server - native
!
[SERVICE=LMTPSN]
PORT=226
IMAGE=IMTA_BIN:tcp_lmtpn_server
LOGFILE=IMTA_LOG:tcp_lmtpsn_server.log
PARAMETER=CHANNEL=tcp_lmtpsn
STACKSIZE=2048000
! Uncomment the following line and set INTERFACE_ADDRESS to an appropriate
! host IP (dotted quad) if the dispatcher needs to listen on a specific
! interface (e.g. in a HA environment).
!INTERFACE_ADDRESS=
!

請注意,依預設,dispatcher.cnf 檔案中的 LMTP 服務均已被註釋。您必須取消註釋,才能使 LMTP 運作。此外,這些 LMTP 連接埠號只是範例,您可以選擇任何號碼。

這與上述僅為 LMTP 配置後端儲存的整個 dispatcher.cnf 檔案相同。對映檔案還需要 PORT_ACCESS 對映,正如 LMTP 需要後端儲存一樣。



上一個      目錄      索引      下一個     


Copyright 2003 Sun Microsystems, Inc.。版權所有。