Sun Java System Messaging Server 6 2005Q4 管理指南

第 8 章 MTA 概念

本章節提供了 MTA 的概念說明。包含以下各節:

MTA 功能

郵件傳輸代理程式或 MTA 是 Messaging Server 的元件 (圖 8–1)。從最基本層級來看,MTA 是郵件路由器。它接受來自其他伺服器的郵件,並讀取位址,然後將郵件路由至下一個伺服器,使其最終到達目的地 (通常為使用者的電子信箱)。

多年來,MTA 增加了許多功能,提高了大小、能力和綜合性。這些 MTA 功能是重疊的,但通常可分類為:

一些子元件和程序支援這些功能,如圖 8–2 中所示。本章描述這些子元件和程序。另外,系統管理員也可以使用諸多工具啟用和配置這些功能。其中包含 MTA 選項、configutil 參數、對映表、關鍵字、通道和重新寫入規則。這些內容在之後的 MTA 章節中進行描述:

圖 8–1 Messaging Server,簡化的元件檢視 (Communications Express 未顯示)

本圖顯示 Messaging Server 的簡化檢視。

圖 8–2 MTA 架構

本圖顯示 MTA 的簡化架構和資料流程。

MTA 架構和郵件流程簡介

本小節提供了 MTA 架構和郵件流程的簡介 (圖 8–2)。請注意,MTA 是非常複雜的元件,而本圖表是對系統中郵件流程的簡化描述。事實上,本圖沒有完全準確地描述系統中的整個郵件流程。但是,對於進行概念上的論述,該圖足夠了。

派送程式和 SMTP 伺服器 (從屬程式)

郵件經由 SMTP 階段作業從網際網路或企業內部網路進入 MTA。當 MTA 收到 SMTP 連線請求時,MTA 派送程式 (多重執行緒連線派送代理程式) 會執行從屬程式 (tcp_smtp_server) 以處理 SMTP 階段作業。派送程式會為每項服務保留多執行緒程序的儲存區。當請求其他階段作業時,派送程式會啟動 SMTP 伺服器程式以處理每個階段作業。派送程式程序池中的程序可同時處理許多連線。派送程式和從屬程式一起可對每封內送郵件執行一些不同的功能。三個主要功能是:

如需更多資訊,請參閱派送程式

路由和位址重寫

SMTP 伺服器可讓郵件形成佇列,但是其他通道 (包括轉換通道和再處理通道) 也可以執行該作業。在此傳送階段期間,會完成一些作業,但主要作業為︰

通道

通道為基本的 MTA 元件,用於郵件處理。通道表示與其他系統 (例如其他 MTA、其他通道或本地郵件儲存) 的郵件連線。當郵件傳入時,不同的郵件需要根據郵件的來源和目標進行不同的路由和處理。例如,對遞送至本地郵件儲存的郵件的處理不同於對遞送至網際網路的郵件的處理,而對後者的處理又有別於對傳送至郵件系統中其他 MTA 的郵件的處理。通道為每個連線提供所需的自訂處理和路由的機制。在預設安裝中,大多數郵件進入處理網際網路、企業內部網路和本地郵件的通道。

在特定情況下也可以建立專用通道。例如,假定某個網際網路網域處理郵件的速度非常慢,導致發往該網域的郵件阻塞了 MTA。可以建立特殊通道以對發往此慢速網域的郵件進行特殊處理,從而為系統解決該網域阻塞問題。

位址的網域部分決定讓郵件在哪個通道中形成佇列。讀取網域並決定適當通道的機制稱為重新寫入規則 (請參閱重寫規則)。

通道通常由通道佇列和稱為主程式的通道處理程式組成。從屬程式將郵件遞送至相應的通道佇列後,主要程式便執行所需的處理和路由。通道 (如同重新寫入規則) 在 imta.cnf 檔案中指定和配置。通道項目示例如下:


tcp_intranet smtp mx single_sys subdirs 20 noreverse maxjobs 7 SMTP_POOL
maytlsserver allowswitchchannel saslswitchchannel tcp_auth
tcp_intranet-daemon

第一個詞 (此例中為 tcp_intranet) 是通道名稱。最後一個詞稱為通道標記。中間的詞稱為通道關鍵字,用來指定如何處理郵件。數百個不同的關鍵字允許按照多種方式處理郵件。第 12 章, 配置通道定義中提供通道關鍵字的完整說明。

郵件遞送

郵件經過處理後,主程式將此郵件沿郵件傳送路徑傳送至下一站。它可能是預定收件者的電子信箱、其他 MTA,或者甚至是不同的通道。該圖中雖然沒有顯示轉寄至其他通道的流程,但這是經常發生的。

請注意位址的本機部分和接收欄位通常是 7 位元字元。如果 MTA 在這些欄位中讀取 8 位元字元,則其會使用星號替代每個 8 位元字元

派送程式

派送程式是多重執行緒派送代理程式,允許多個多重執行緒伺服器程序分擔 SMTP 連線服務的責任。使用派送程式時,可以同時執行數個多執行緒 SMTP 伺服器程序,它們均處理同一連接埠的連線。此外,每台伺服器可能有一個或多個處於使用中的連線。

派送程式用作其配置中所列 TCP 連接埠的中央接收器。對於每項已定義的服務,派送程式可以建立一個或多個 SMTP 伺服器程序以在連線建立後進行處理。

一般來說,當派送程式收到已定義 TCP 連接埠的連線時,它將為此連接埠上的服務檢查可用工作程序儲存區,並為新連線選擇最佳工作程序。如果沒有合適的工作程序,則派送程式可以在配置允許的情況下建立新的工作程序,以處理此連線及後續連線。派送程式也可以建立新的工作程序以等待將來的送進連線。有數個配置選項可用來調校派送程式對其各種服務的控制,尤其是控制工作程序數量和每個工作程序處理的連線數量。

請參閱派送程式配置檔案,以獲得更多資訊。

伺服器程序的建立和有效期

派送程式中的自動事務性工作功能控制新伺服器程序的建立以及舊的或閒置伺服器程序的有效期。控制派送程式運作方式的基本選項為 MIN_PROCSMAX_PROCSMIN_PROCS 可使一些伺服器程序處於就緒狀態並等待傳入的連線,從而提供有保證的服務級別。另一方面,MAX_PROCS 可為給定服務設定允許同時處於使用中的伺服器程序數目之上限。

目前執行的伺服器程序可能會由於已經達到所能處理的連線的最大數量或已被排程為終止而無法接受任何連線。派送程式可以建立其他程序以協助處理將來的連線。

MIN_CONNSMAX_CONNS 選項會提供一種機制以協助您在伺服器程序之間分配連線。MIN_CONNS 指定將伺服器程序標記為「足夠忙」的連線數目,而 MAX_CONNS 指定將伺服器程序標記為「最忙」的連線數目。

一般來說,當伺服器程序目前的數目少於 MIN_PROCS 或所有現有伺服器程序均「足夠忙」(每個程序擁有的目前處於使用中連線數目至少是 MIN_CONNS) 時,派送程式將建立新的伺服器程序。

如果伺服器程序被未預期結束,例如,由 UNIX 系統 kill 指令結束,則派送程式仍會在新的連線傳入時建立新的伺服器程序。

如需有關配置派送程式的資訊,請參閱派送程式配置檔案

啟動和停止派送程式的步驟

若要啟動派送程式,請執行指令︰

start-msg dispatcher

該指令納入並廢棄了所有其他 start-msg 指令,這些指令先前用於啟動 MTA 的元件 (派送程式已被配置為對其進行管理)。特別是,您不可再使用 imsimta start smtp。嘗試執行任何棄用的指令將導致 MTA 發出警告。

若要關閉派送程式,請執行指令︰

stop-msg dispatcher

派送程式關閉時伺服器程序所發生的情況,取決於底層的 TCP/IP 套裝軟體。如果您修改了套用於派送程式的 MTA 配置或選項,則必須重新啟動派送程式,以使新的配置或選項生效。

若要重新啟動派送程式,請執行指令︰

imsimta restart dispatcher

重新啟動派送程式會關閉目前正在執行的派送程式,然後立即啟動新的派送程式。

重寫規則

重新寫入規則決定以下內容︰

每個重新寫入規則由式樣範本組成。式樣是與位址的網域部分相符合的字串。範本指定在網域部分符合式樣時要採取的動作。它由以下兩個部分組成:1) 指定應該如何重寫位址的指令集 (即控制字元的字串) 2) 要將郵件傳送至的通道名稱。重寫位址後,郵件在目標通道中形成佇列,以便遞送給預計的收件者。

重寫規則示例如下:

siroe.com $U%$D@tcp_siroe-daemon

siroe.com 為網域式樣。位址包含 siroe.com 的所有郵件將按照範本指令 ($U%$D) 重新寫入。$U 指定重新寫入的位址使用相同的使用者名稱。% 指定重寫的位址使用相同的網域分隔符號。$D 指定重新寫入的位址使用與式樣中匹配的網域名稱相同的網域名稱。@tcp_siroe-daemon 指定將位址已重新寫入的郵件傳送至名為 tcp_siroe-daemon 的通道。請參閱第 11 章, 配置重寫規則,以獲得更多詳細資訊。

如需有關配置重新寫入規則的更多資訊,請參閱MTA 配置檔案第 11 章, 配置重寫規則

通道

通道為基本的 MTA 元件,用於處理郵件。通道表示與另一個電腦系統或一組系統的連線。實際的硬體連線和/或軟體傳輸可能會隨著通道的不同有很大差異。

通道可執行以下功能:

郵件在傳送至 MTA 時由通道形成佇列,並在從 MTA 傳出時移出佇列。通常情況下,郵件經由一個通道進入,而經由另一個通道傳出。通道可將郵件移出佇列,然後處理該郵件或將讓郵件在其他 MTA 通道中形成佇列。

主要程式和從屬程式

一般來說 (並非總是如此),通道與兩個程式相關聯︰主要程式和從屬程式。從屬程式接受來自其他系統的郵件,並將它們增加至通道的郵件佇列。主要程式將來自通道的郵件傳送至其他系統。

例如,SMTP 通道有一個傳送郵件的主要程式和一個接收郵件的從屬程式。它們分別是 SMTP 用戶端和伺服器。

主要通道程式通常負責由 MTA 啟動的外寄連線。主要通道程式:

從屬通道程式通常接受送進的連線,即 MTA 回應外部請求。從屬通道程式:

例如,圖 8–3 顯示兩個通道程式,Channel 1 和 Channel 2。Channel 1 中的從屬程式接收來自遠端系統的郵件。它查看位址,並依需要套用重寫規則,然後根據重寫位址讓郵件在相應的通道郵件佇列中形成佇列。

主要程式將郵件從佇列中移出,並啟動郵件的網路傳輸。請注意,主要程式僅能從它自己的通道佇列中將郵件移出佇列。

圖 8–3 主要程式和從屬程式

本圖顯示主要程式和從屬程式互動作業。

儘管典型的通道同時具有主程式和從屬程式,但可能會有某個通道僅包含從屬程式主程式。例如,隨附 Messaging Server 提供的 ims-ms 通道僅包含主程式,因為此通道僅負責將郵件移出佇列至本機郵件儲存,如圖 8–4 中所示。

圖 8–4 ims-ms 通道

本圖顯示 ims-ms 通道。

通道郵件佇列

所有通道均有一個相關聯的郵件佇列。當郵件進入郵件傳送系統時,從屬程式決定讓郵件在哪個郵件佇列中形成佇列。已形成佇列的郵件儲存在通道佇列目錄中的郵件檔案中。依預設,這些目錄儲存在以下位置:msg_svr_base/data/queue/channel/*。有關訊息佇列大小的資訊可在「Sun Java System Communications Services 6 2005Q4 Deployment Planning Guide」中的「Disk Sizing for MTA Message Queues」中找到。


注意 – 注意 –

請勿在 MTA 佇列目錄 (即 imta_tailor 檔案中 IMTA_QUEUE 的值) 中增加任何檔案或目錄,否則將會導致出現問題。當為 MTA 佇列目錄使用單獨檔案系統時,在該掛載點下建立子目錄並指定該子目錄值為 IMTA_QUEUE


通道定義

通道定義顯示在 MTA 配置檔案 imta.cnf 的下半部分,位於重新寫入規則之後 (請參閱MTA 配置檔案中規則區段以及通道定義的開頭部分)。

通道定義包含通道名稱,這些名稱之後跟關鍵字可選擇清單以及唯一通道標記。前者定義通道配置,而重新寫入規則會使用後者將郵件路由至通道。通道定義以單一空白行分隔。通道定義內部可能存在註釋,但不存在空白行。


[blank line]
! sample channel definition
Channel_Name keyword1 keyword2
Channel_Tag
[blank line]

所有通道定義總稱為通道主機表。個別通道定義稱為通道區段。例如,在以下範例中,通道主機表包含三個通道定義或通道區塊。


! test.cnf - An example configuration file.
!
! Rewrite Rules
      .
      .
      .

! BEGIN CHANNEL DEFINITIONS
! FIRST CHANNEL BLOCK
l
local-host

! SECOND CHANNEL BLOCK
a_channel defragment charset7 usascii
a-daemon

! THIRD CHANNEL BLOCK
b_channel noreverse notices 1 2 3
b-daemon

典型的通道項目如下所示:


tcp_intranet smtp mx single_sys subdirs 20 noreverse maxjobs 7 SMTP_POOL
maytlsserver allowswitchchannel saslswitchchannel tcp_auth
tcp_intranet-daemon

第一個詞 (此例中為 tcp_intranet) 是通道名稱。最後一個詞 (此例中為 tcp_intranet-daemon) 稱為通道標記。通道標記是重寫規則用來導向郵件的名稱。通道名稱和通道標記之間的詞稱為通道關鍵字,它們指定如何處理郵件。數百個不同的關鍵字允許按照多種方式處理郵件。第 12 章, 配置通道定義中會列出並說明通道關鍵字的完整清單。

通道主機表定義 Messaging Server 可以使用的通道以及與每個通道關聯的系統名稱。

在 UNIX 系統上,檔案中的第一個通道區段通常說明本機通道 l。(異常是一個預設通道,可以在本機通道之前顯示。)本地通道用於作出路由決定和傳送由 UNIX 郵件工具傳送的郵件。

您也可以在 MTA 選項檔案 (option.dat) 中為通道設定全域選項,或在通道選項檔案中為特定通道設定選項。如需有關選項檔案的更多資訊,請參閱選項檔案TCP/IP (SMTP) 通道選項檔案。如需有關配置通道的詳細資訊,請參閱第 12 章, 配置通道定義。如需有關建立 MTA 通道的更多資訊,請參閱MTA 配置檔案

MTA 目錄資訊

對於 MTA 處理的每封郵件,MTA 均需要存取有關其支援的使用者、群組和網域的目錄資訊。此資訊儲存在 LDAP 目錄服務中。MTA 可直接存取 LDAP 目錄。在第 9 章, MTA 位址轉換和路由中進行了完整說明。

工作控制器

每次郵件在通道中形成佇列時,工作控制器均可確保有一項遞送郵件的工作正在執行。這可能涉及到啟動新的工作程序、新增執行緒或只指明工作已在執行中。如果因為已達到通道或儲存區的工作限制而無法啟動工作,工作控制器將會等待,直到其他工作結束。當不再超出工作限制時,工作控制器將啟動其他工作。

通道工作在工作控制器中的處理儲存區內部執行。可以認為池是通道工作執行的「地方」。儲存區提供一個運算區域,可供一組工作在其中作業,而無需與儲存區外部的工作競爭資源。如需有關池的更多資訊,請參閱工作控制器檔案通道執行工作的處理儲存區

通道的工作限制由 maxjobs 通道關鍵字決定。池的工作限制由池的 JOB_LIMIT 選項決定。

Messaging Server 通常會嘗試立即遞送所有郵件。然而,如果首次嘗試無法將某個郵件傳送出去,則系統會將此郵件延遲一段時間 (該時間由適當的 backoff 關鍵字決定)。一旦已耗用完 backoff 關鍵字中指定的時間後,便可以傳送被延遲的郵件,並且在必要時會啟動通道工作以處理此郵件。

工作控制器的目前正在處理和等待處理的郵件之內部記憶體資料結構,通常反映了儲存在 MTA 佇列區域中磁碟上的全套郵件檔案。但是,如果磁碟上儲存區中的郵件檔案增加到超過工作主控台的內部記憶體資料結構大小限制時,則工作主控台將僅在記憶體中追蹤磁碟上所有郵件檔案的子集。工作控制器僅處理其在記憶體中追蹤的那些郵件。在遞送了足夠數量的郵件從而釋放了足夠的內部記憶體儲存後,工作控制器將透過掃描 MTA 佇列區域來自動更新它的內部記憶體儲存,以更新其郵件清單。此後,工作控制器開始處理它剛從磁碟上擷取的其他郵件檔案。工作控制器將自動掃描 MTA 佇列區域。

如果您的網站經常地遇到大量的郵件積壓,可透過使用 MAX_MESSAGES 選項來調校工作控制器。透過增加 MAX_MESSAGES 選項值以允許工作控制器使用更多的記憶體,您可以儘量避免郵件積壓溢出工作控制器的內部記憶體快取的情況。這會減少工作控制器必須掃描 MTA 佇列目錄時的系統消耗。但是請記住,當工作控制器確實需要重建內部快取記憶體時,處理過程會因快取記憶體的增大而變長。同時請注意,由於每次啟動或重新啟動工作控制器時,工作控制器均必須掃描 MTA 佇列目錄,因此與沒有郵件儲存區相比,有大量郵件儲存區意味著啟動或重新啟動工作控制器需要更多的系統消耗。

如需有關池和配置工作控制器的資訊,請參閱工作控制器檔案配置郵件處理和遞送

啟動和停止工作控制器的步驟

若要啟動工作控制器,請執行指令︰

start-msg job_controller

若要關閉工作控制器,請執行指令︰

stop-msg job_controller

若要重新啟動工作控制器,請執行指令︰

imsimta restart job_controller

重新啟動工作控制器會關閉目前正在執行的工作控制器,然後立即啟動新的工作控制器。