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

Sun logo
Sun Java System Messaging Server 6 2005Q1 管理指南 

第 15 章
LMTP 遞送

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


注意

依設計,LMTP 適合在多層部署中使用。不可能將 LMTP 與單一系統部署配合使用。此外,Messaging Server 已實作的 LMTP 服務不適用於與其他 LMTP 伺服器或其他 LMTP 用戶端配合使用。


本章包含以下各節:


LMTP 遞送功能

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


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

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

圖 15-1  不使用 LMTP 的兩層部署

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

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

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

然後,ims_ms 程序將選取郵件並嘗試將其遞送至儲存。在這種情況下,形成佇列處理會執行兩次,並且每個 MTA 均執行一次 LDAP 查詢。


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

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

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

在典型的多層部署中,使用者佈建在不同的後端郵件儲存機器上。這些後端機器中的一台或多台可能並未開啟 LMTP,因此前端轉送需要瞭解哪些儲存機器可識別 LMTP。您可以使用一般資料庫功能明確命名那些配置為接受 LMTP 遞送的郵件儲存,以實現此目的。

使用 LMTP 配置內送 MTA 轉送

若要配置內送 MTA 轉送以使用 LMTP,請執行以下作業:

  1. 透過將以下行增加至 option.dat 啟動文字資料庫:
  2. USE_TEXT_DATABASES=1

    在此步驟中,會在 MTA 中使用一般資料庫的純文字檔案。請注意,如果您已使用一般資料庫,則可以略過此步驟。

  3. 建立或修改一般資料庫文字檔案。

    # cd /opt/SUNWmsgsr/config/
    # vi general.txt

    LMTP_CS|msg-store.siroe.com lmtpcs-daemon
    LMTP_CS|name-1-lmtp-store.siroe.com lmtpcs-daemon
    LMTP_CS|name-2-lmtp-store.siroe.com lmtpcs-daemon
    ..
    ..
    LMTP_CN|Zmar.Talek@siroe.com lmtpcn-daemon
    ..
    LMTP_CN|Fred.Bloggs@siroe.com lmtpcn-daemon

    # chown mailsrv general.txt

  4. 存在兩種類型的項目︰一種用來處理遞送至 lmtpnative 通道的使用者特定遞送,另一種用來處理經由 tcp_lmtpcs 通道之遞送的儲存範圍的設定。

  5. options.dat 檔案中建立或修改 DELIVERY_OPTIONS 變數。
  6. 必須變更 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:$M$_+$2S%$\$2I@ims-ms-daemon,\
        #&members=*,\
        #*native=@$X:$M,\
        #*unix=@$X:$M,\
        #/hold=$L%$D@hold,\
        #*file=@$X:+$F,\
        #&@members_offline=*,\
        #program=$M%$P@pipe-daemon,\
        #forward=**,\
        #*^!autoreply=$M+$D@bitbucket

    請注意電子信箱遞送選項的式樣變更,並注意自動回覆遞送選項前面現在已加上字元 #,以強制轉送機器上的動作。$X 替換將插入使用者的 mailhost 屬性值。這會產生來源路由位址。

    另請注意,為使原生檔案、Unix 檔案和程式遞送方法有效,MTA 必須在目標機器上執行。

  7. 將 LMTP 重寫規則增加至 imta.cnf 檔案:

    # cd /opt/SUNWmsgsr/config/
    # cp imta.cnf imta.cnf.orig
    # vi imta.cnf

    !
    ! pipe
    .pipe-daemon $U%$H.pipe-daemon@pipe-daemon
    !
    ! tcp_local
    !Rules for top level internet domains
    <IMTA_TABLE:internet.rules
    !
    !Do mapping lookup for internal IP addresses
    [] $E$R${INTERNAL_IP,$L}$U%[$L]@tcp_intranet-daemon
    !
    !Do general.txt lookup for lmtp hosts
    .domain-name.com $S$U%$H$D@$(LMTP_CN|$U@$H$D)
    .domain-name.com $S$U%$H$D@$(LMTP_CS|$H$D)
    !
    ! tcp_intranet
    !Do mapping lookup for internal IP addresses
    [] $E$R${INTERNAL_IP,$L}$U%[$L]@tcp_intranet-daemon
    .domain-name.com $U%$H.domain-name.com@tcp_intranet-daemon

  8. 在此步驟中,一對重寫規則會執行一般資料庫的標記探測,以查看位址的來源路由部分是否符合任意項目,以執行 LMTP 遞送。general.txt 檔案 (在步驟 2 中建立) 中存在標記項目,以指定經由適當的通道遞送至後端郵件儲存。此處重寫規則中的 $S 表示僅在位址包含來源路由時適用。如果有與一般資料庫中的某個項目相符的項目,則重寫規則成功,郵件經由 tcp_lmtpX 通道 (該通道經由 LMTP 執行遞送) 傳送至來源路由後端主機。

    如果未找到相符項目,重寫程序將繼續進行,直到在其他重寫規則中找到相符項目。在大多數情況下,如果透過一般資料庫探測未找到相符項目,則郵件會經由 tcp_intranet 通道 (該通道經由 SMTP 執行遞送) 進行路由。

  9. 將新的通道區塊加入 imta.cnf
  10. 您還必須在 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

  11. 請確定您的配置變更。

    # cd /opt/SUNWmsgsr/bin
    # ./imsimta refresh

    Compiled configuration done

    Killing Dispatcher : 23021

    Dispatcher startup requested

    Job Controller shutdown requested

    Job Controller startup requested


  12. 注意

    請確定在 LMTP 通道上使用 lmtp 通道關鍵字。請勿在 LMTP 通道上同時使用 smtplmtp 通道關鍵字。另請注意,依預設已註釋 LMTP 通道定義。如果您要 LMTP 運作,必須取消註釋。


如果您擁有具有 Sun Java System Messaging Server 使用者和非 Sun Java System Messaging Server 使用者的組織,則您需要能夠指示哪些使用者使用的是非 Sun Java System Messaging Server 的機器。不可將這些使用者的 delivery 選項設定為 mailbox。而必須將其 delivery 選項設定為 forward。該轉寄位址應為來源路由格式,可以是 (但不限於) 以下範例中的任何一種:

mailForwardingAddress: @nonSJSMSHost.siroe.com:first.last@siroe.com

mailForwardingAddress: @nonSJSMSHost.siroe.com:login@siroe.com

mailForwardingAddress: @nonSJSMSHost.siroe.com:first.last@nonSJSMSHost.siroe.com

mailForwardingAddress: @nonSJSMSHost.siroe.com:login@nonSJSMSHost.siroe.com

換言之,

@nonSJSMSHost.siroe.com: address-which-is-recognized-by-the-nonSJSMSHost

配置帶有 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 Java System 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
tcp_lmtpss-daemon

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

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

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

在某些情況下,您可能希望後端儲存具有 MTA 的完整功能,但仍具有使用 LMTP 的載入保存功能。例如,您可能需要後端儲存上的程式遞送。在此情況下,轉送應按照上述使用 LMTP 配置內送 MTA 轉送中的描述進行配置。

在具有完整 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 需要後端儲存一樣。


已實作的 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 的位元 (如果設定) 將確保郵件的遞送,即使使用者超出配額。(請注意,xdflg 為內部參數,其中的位元會變更或增加,恕不另行通知。我們不支援使用此擴充的其他用戶端與我們的伺服器配合使用,也不支援我們的用戶端與某些其他伺服器和此參數配合使用。)

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

--->DATA
---> <the message text>
--->.

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

<--- 500 message too big

並結束連線。

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

<--- 250 2.5.0 address OK

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

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

---> quit
<--- 221 OK

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

表 15-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

郵件無空行

否則,需要變更電子信箱、原生 (和 UNIX) 以及檔案的遞送選項。這些規則的目標是產生將導致郵件透過相應的 LMTP 通道被傳送至後端伺服器的位址。所產生的位址是以下格式的來源路由位址:

@sourceroute:localpart@domain



上一個      目錄      索引      下一個     


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