Sun Java System Messaging Server 6.3 管理指南

第 10 章 關於 MTA 服務和配置

本章說明一般 MTA 服務和配置。您可以在其他章節中找到更多特定和詳細的說明。包含以下各節:

10.1 編譯 MTA 配置

每次修改 MTA 配置檔案 (例如 imta.cnfmappingsoption.dat) 之後,均必須重新編譯配置。此重新編譯會將配置檔案編譯為共用記憶體中的單一影像 (在 UNIX 上) 或動態連結程式庫 (NT)。

已編譯的配置具有靜態和動態的可重新載入部分。如果動態部分已變更,而您執行 imsimta reload,則正在執行的程式將重新載入動態資料。動態部分包括對映表、別名和查詢表。

編譯配置資訊的主要目的是提昇效能。使用已編譯配置的另一個功能是可更方便地測試配置變更,因為在使用已編譯配置時,配置檔案本身未處於「使用中」。

若 MTA 元件 (如通道程式) 必須讀取配置檔案,它將首先檢查是否存在已編譯配置。如果存在已編譯配置,則影像將附加至執行中的程式。如果影像附加作業失敗,MTA 會返回使用原先讀取文字檔案的舊方法。

如果對 reverseforward 或一般資料庫進行變更,則請執行指令 imsimta reload 使變更生效。如果對不會影響工作控制器的 imta.cnfmappings 檔案、別名conversionsoption.dat 檔案進行變更,則應在 imsimta restart smtp 之後執行 imsimta cnbuild。如果您對 dispatcher.cnf 進行變更,則需要執行 imsimta restart dispatcher。如果對包括在已編譯的配置 (影響工作控制器,但不影響 SMTP 伺服器) 中的配置檔案進行變更,在多數情況下,應執行以下指令︰imsimta cnbuildimsimta restart job_controller

如果對包括在已編譯的配置 (影響工作控制器和 SMTP 伺服器) 中的配置檔案進行變更,應執行以下指令︰


imsimta cnbuild
imsimta restart smtp 
imsimta restart job_controller

(如需有關這些指令的詳細資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「MTA Commands」。)

必須重新啟動工作控制器的其他實例︰

MTA 配置包括 imta.cnf 和其包含的所有檔案 (例如,internet.rules)、別名檔案、mappings 檔案、conversions 檔案、option.dat 檔案 (以及任何先前包含的任何檔案) 以及 imta.filterreverseforward 、一般資料檔案,與一些潛在的 configutil 參數。

請注意,所有上述對 imta.cnf 的變更 (例如通道定義關鍵字的補充/變更) 還需要 imsimta cnbuild - 此為基本需求,無論工作控制器是否需要重新啟動。

嘗試避免重新啟動工作控制器 (尤其在佇列中存在大量郵件時),除非上述情況之一需要重新啟動。

不建議在生產系統上使用 imsimta refresh 指令,因為,這通常無需重新啟動工作控制器,且重新啟動工作控制器將重設郵件重試,延遲的通知郵件以及退回的郵件等。

10.2 MTA 配置檔案

主要的 MTA 配置檔案為 imta.cnf。依預設,該檔案位於 msg-svr-base/config/imta.cnf。該檔案包含 MTA 通道定義以及通道重寫規則。與重寫目標位址關聯的通道將成為目標通道。系統使用預設 imta.cnf 時,通常會運行良好。

本節將簡要介紹 MTA 配置檔案。如需有關配置組成 MTA 配置檔案的重寫規則和通道定義之詳細資訊,請參閱第 11 章, 配置重寫規則第 12 章, 配置通道定義

透過修改 MTA 配置檔案,您可以建立在網站中使用的通道並且可以經由重寫規則建立負責各類位址的通道。配置檔案可透過指定可用的傳輸方法 (通道),以及將位址類型與相應通道關聯的傳輸路線 (重寫規則),來建立電子郵件系統的配置。

配置檔案由兩部分組成︰網域重寫規則和通道定義。網域重寫規則會先顯示在檔案中並以空行與通道定義分隔。通道定義統稱為通道表格。個別通道定義會形成通道區塊。

以下 imta.cnf 配置檔案範例顯示如何使用重寫規則將郵件路由至正確的通道。其中不使用網域名稱,以儘可能使其簡化。重寫規則顯示在配置檔案的上半部分,通道定義顯示在配置檔案的下半部分。


! test.cnf - An example configuration file.   (1)!
! This is only an example of a configuration file. It serves
! no useful purpose and should not be used in a real system.
!
! Part I: Rewrite rules
a     $U@a-daemon           (2)
b     $U@b-daemon
c     $U%c@b-daemon
d     $U%d@a-daemon    
      (3)
! Part II: Channel definitions
l      (4)
local-host

a_channel defragment charset7 usascii      (5)
a-daemon

b_channel noreverse notices 1 2 3
b-daemon

</opt/SUNWmsgsr/msg-tango/table/internet.rules    (6)

以下清單中說明了上述配置檔案的主要項目 (以粗體數字標記、置於括號中)。

  1. 驚嘆號 (!) 用於包含註釋行。驚嘆號必須顯示在第一欄中。顯示在其他任何位置的驚嘆號均被解譯為文字驚嘆號。

  2. 重寫規則顯示在配置檔案的前半部分。重寫規則各行之間不能出現空行。但允許包含帶有註釋的行 (以第一欄中的驚嘆號開頭)。

  3. 檔案中顯示的第一個空行表示重寫規則部分的結尾和通道區塊的開頭。這些定義統稱為通道主機表,該表格定義了 MTA 可以使用的通道,以及與每個通道相關聯的名稱。

  4. 顯示的第一個通道區塊通常為本機通道或 l 通道。然後,空行將各個通道區塊彼此分隔開。(但 defaults 通道是個例外,它可顯示在 l 通道之前)。

  5. 典型的通道定義由通道名稱 ( a_channel)、定義通道配置的某些關鍵字 (defragment charset7 usascii) 以及路由系統 (a-daemon) (亦稱為通道標記) 組成。

  6. 配置檔案中可以包含其他檔案的內容。如果第一欄中的某一行包含 小於號 (<),則該行的其餘部分將視為檔案名稱;檔案名稱應一律為完整的絕對檔案路徑。開啟檔案時,其內容將在此處併入配置檔案。包含的檔案最多可以嵌套三層。配置檔案中包含的任何檔案必須與配置檔案一樣,可由所有人讀取。

表 10–1 顯示之前的配置如何路由某些範例位址。

表 10–1 位址和關聯的通道

位址 

佇列通道 

u@a

a_channel

u@b

b_channel

u@c

b_channel

u@d

a_channel

請參閱8.4 重寫規則8.5.3 通道定義第 11 章, 配置重寫規則,以取得有關 MTA 配置檔案的更多資訊。


備註 –

每次變更 imta.cnf 檔案後,均必須重新編譯 MTA 配置。請參閱10.1 編譯 MTA 配置


10.3 對映檔案

許多 MTA 元件使用表查詢形式的資訊。此類表格用於將輸入字串變換 (亦即對映) 為輸出字串。此類表格稱為對映表,通常顯示為兩欄。第一欄 (左側) 提供要與之相符的可能輸入字串 (式樣),第二欄 (右側) 提供對映輸入字串的結果輸出字串 (範本)。如需有關哪些 MTA 程序使用哪些表格以及使用時機之詳細資訊,請參閱表 10–2

大多數 MTA 資料庫 (包含不同類型的 MTA 資料,並且不應與對映表混淆) 是此類表格的實例。但是,MTA 資料庫檔案不提供萬用字元查詢功能,因為該功能本身效率較低,必須掃描整個資料庫以查詢與萬用字元相符的項目。

MTA mappings 檔案支援多個對映表。它提供萬用字元功能以及多步和反覆式對映方法。此方法的計算量比使用資料庫要大,特別是當項目很多時。但是,其靈活性帶來的好處是您不需要同等資料庫中的大多數項目,從而使整體消耗降低。

對映表保存在 MTA mappings 檔案中。該檔案使用 MTA tailor 檔案中 IMTA_MAPPING_FILE 選項指定的檔案;依預設,該檔案為 msg-svr-base/config/mappingsmappings 檔案的內容會做為可重新載入區段的一部分,併入已編譯的配置中 (請參閱10.1 編譯 MTA 配置)。如果無法讓所有人都能讀取該檔案將導致錯誤的運作方式。每次變更 mappings 檔案後,均必須重新編譯 MTA 配置。請參閱10.1 編譯 MTA 配置

表 10–2 列出了本書中所描述的對映表。

表 10–2 Messaging Server 對映表

對映表 

頁數 

說明 

AUTH_REWRITE

與 authrewrite 關鍵字配合使用,以便使用從認證作業 (SASL) 中獲得的定址資訊修改標頭和訊息封位址。請參閱12.4.3 TCP/IP 連線和 DNS 查詢支援

CHARSET-CONVERSION

用於指定應該執行哪種類型的通道至通道字元集轉換以及郵件重新格式化。請參閱13.6 字元集轉換與郵件重新格式化

COMMENT_STRINGS

用於修改位址標頭註釋 (括號中的字串)。請參閱12.6.13 處理位址標頭行中的註釋

CONVERSIONS

用於為轉換通道選取郵件通訊。請參閱13.5.2 選取通訊流以進行轉換處理

FORWARD

用於執行轉寄與使用檔案或資料庫執行的轉寄類似。請參閱10.9.3 正向查詢表格和 FORWARD 位址對映

FROM_ACCESS

用於根據訊息封 From 位址篩選郵件。如果 To 位址不適用,則使用此表格。請參閱18.2.1 存取控制對映表 — 作業

INTERNAL_IP

用於識別內部系統和內部子網路。請參閱18.6 新增 SMTP 轉送

IP_ACCESS

用以根據來源通道、遠端伺服器的 IP 位址計數、所嘗試的現有 IP 位址索引,封鎖內送連線。請參閱18.3.5 IP_ACCESS 對映表

MAIL_ACCESS

用於根據 SEND_ACCESSPORT_ACCESS 表格中找到的組合資訊,來封鎖內送的連線。請參閱18.2.1 存取控制對映表 — 作業

NOTIFICATION_LANGUAGE

用於自訂或本土化通知郵件。請參閱10.10 控制遞送狀態通知郵件

ORIG_MAIL_ACCESS

用於根據 ORIG_SEND_ACCESSPORT_ACCESS 表格中找到的組合資訊,來封鎖內送的連線。請參閱18.2.1 存取控制對映表 — 作業

ORIG_SEND_ACCESS

用於根據訊息封 From 位址、訊息封 To 位址、來源通道和目標通道來封鎖內送的連線。請參閱18.2.1 存取控制對映表 — 作業

PERSONAL_NAMES

用於修改個人名稱 (尖括號分隔的位址之前的字串)。請參閱12.6.14 處理位址標頭行中的個人名稱

PORT_ACCESS

用於根據 IP 編號封鎖內送的連線。請參閱18.2.1 存取控制對映表 — 作業

REVERSE

用於將位址從內部形式轉換為公用的公開形式。10.9 將位址從內部格式轉換為公用格式

SEND_ACCESS

用於根據訊息封 From 位址、訊息封 To 位址、來源通道和目標通道來封鎖內送的連線。請參閱18.2.1 存取控制對映表 — 作業

SMS_Channel_TEXT

用於網站定義的文字轉換。請參閱C.2.5 網站定義的文字轉換

X-ATT-NAMES

用於從對映表中擷取參數值。請參閱13.5.3.5 從轉換項目呼叫對映表

X-REWRITE-SMS-ADDRESS

用於本地 SMS 位址的有效性檢查。請參閱C.2.4 網站定義的位址有效性檢查和轉換

10.3.1 對映檔案中的檔案格式

mappings 檔案由一系列獨立表格組成。每個表格以其名稱開頭。名稱的第一欄始終為字母字元。表格名稱後面必須有一個空行,然後是表格中的項目。項目由零個或多個縮排行組成。每個項目行包含兩欄,由一個或多個空格或標籤分隔。項目中的所有空格均必須使用 $ 字元引用。每個對映表名稱之後和每個對映表之間均必須有空行;單一表格中的項目之間不能出現空行。註釋由第一欄中的驚嘆號 (!) 開頭。

結果格式與以下格式類似:


TABLE1_NAME

   pattern1-1    template1-1
   pattern1-2    template1-2
   pattern1-3    template1-3
      .              .
      .              .
      .              .
   pattern1-n    template1-n

TABLE2_NAME

   pattern2-1    template2-1
   pattern2-2    template2-2
   pattern2-3    template2-3
       .            .
       .            .
       .            .
   pattern2-n    template2-n
          .
          .
          .


TABLE3_NAME

           .
          .
          .

         

使用對映表 TABLE2_NAME 的應用程式會將字串 pattern2-2 對映至由 template2-2 指定的任何內容。各模式或範本可個別包含多達 256 個字元和 1024 個字元。對映檔中一行的大小上限為 4096 個字元。對映中可以顯示的項目數不受限制 (儘管項目過多會消耗大量的 CPU 資源以及過多的記憶體)。較長的行 (超過 252 個字元) 可以使用反斜線 (\) 結束,以在下一行繼續。兩欄之間的空格以及第一欄之前的空格不能省略。

mappings 檔案中不允許出現重複的對映表名稱。

10.3.1.1 在對映檔案中包含其他檔案

可以在 mappings 檔案中包含其他檔案。這可以使用以下格式的行來實現:


<file-spec
            

它可以有效地將檔案 file-spec 的內容替換至 mappings 檔案中包含出現的位置。檔案規格應指定完整的檔案路徑 (目錄等)。以此方式包含的所有檔案必須可由所有人讀取。此類包含的 mappings 檔案中還可以包含註釋。包含最多可以嵌套三層。載入 mappings 檔案的同時會載入包含檔案 — 它們不是按需載入的,因此使用包含檔案不涉及效能或記憶體的節省。

10.3.2 對映作業

mappings 檔案中的所有對映均以一致的方式套用。從一個對映到下一個對映的唯一變更就是輸入字串的源和對映輸出的用途。

對映作業始終以輸入字串和對映表開始。系統將按照項目在對映表中顯示的次序從頭到尾每次掃描一個項目。每個項目的左側均用作式樣,並且將輸入字串以不區分大小寫的方式與該式樣進行比較。如需有關哪些 MTA 程序使用哪些表格以及使用時機的詳細資訊,請參閱表 10–2。本節包含以下小節:

10.3.2.1 對映項目式樣

式樣可以包含萬用字元。特別是允許使用一般萬用字元︰星號 (*) 可以比對零個或多個字元,每個百分比符號 (%) 比對單一字元。可在星號、百分比符號、空格以及定位鍵的前面加一個美元符號 ($) 來引用它們。引用星號或百分比符號將使其失去所有特殊意義。必須引用空格和定位鍵,以防止它們提前結束式樣或範本。文字美元符號字元應採用雙寫形式 ($$),第一個美元符號引用第二個美元符號。

表 10–3 對映式樣萬用字元

萬用字元

說明

僅比對一個字元。 

比對零個或多個字元,最長或「最多」可比對從左至右的全部字元 

向後比對

說明

$ n* 

比對第 n 個萬用字元或全域符號。 

修飾鍵

說明

$_ 

使用最小或「最短」的從左至右比對。 

$@ 

關閉後續萬用字元或全域符號的「儲存」。 

$^ 

開啟後續萬用字元或全域符號的「儲存」;此為預設。 

全域萬用字元

說明

$A% 

比對一個字母字元 (A - Z 或 a - z)。 

$A* 

比對零個或多個字母字元 (A - Z 或 a - z)。 

$B% 

比對一個二進制數字 (0 或 1)。 

$B* 

比對零個或多個二進制數字 (0 或 1)。 

$D% 

比對一個十進制數字 (0 - 9)。 

$D* 

比對零個或多個十進制數字 (0 - 9)。 

$H% 

比對一個十六進制數字 (0 - 9 或 A - F)。 

$H* 

比對零個或多個十六進制數字 (0 - 9 或 A - F)。 

$O% 

比對一個八進制數字 (0 - 7)。 

$O* 

比對零個或多個八進制數字 (0 - 7)。 

$S% 

比對一個符號集字元 (例如,0 - 9、A - Z、a - z、_ 和 $)。 

$S* 

比對零個或多個符號集字元 (即,0 - 9、A - Z、a - z、_ 和 $)。 

$T% 

比對一個定位鍵、垂直定位鍵或空格字元。 

$T* 

比對零個或多個定位鍵、垂直定位鍵或空格字元。 

$X% 

$H% 的同義詞。 

$X* 

$H* 的同義詞。 

$[ c]% 

相符字元 c。 

$[ c]* 

比對隨機出現的字元 c。 

$[ c1 c2 ... cn ]%

僅比對一個出現的字元 (c1、c 2 或 cn)。

$[ c1 c2 ... cn ]*

比對任何字元出現在任意處 (c1、c 2 或 cn)。

$[ c1 -cn ]%

比對 c1 至 cn 範圍中的任一字元。

$[ c1 -cn ]*

比對 c1 至 cn 範圍中隨機出現的任何字元。

$< IPv4> 

比對 IPv4 位址,忽略位元。 

$(IPv4) 

比對 IPv4 位址,保留字首位元。 

${IPv6} 

比對 IPv6 位址。 

在全域中,亦即在 $[...] 建構中,反斜線字元 (\) 為引用字元。若要表示文字連字符 - 或右括號 ],則全域內的連字符或右括號必須以反斜線引用。

式樣中的其他所有字元僅表示並比對自身。特別是,在對映式樣或範本中,單引用字元和雙引用字元以及括號均沒有特殊意義;它們只是一般字元。這樣便很容易寫入與非法位址或部分位址相符的項目。

若要指定多個修飾鍵,或指定修飾鍵和向後比對,則語法中僅可使用一個美中介字元。例如,若要向後比對初始萬用字元,而不儲存向後比對本身,則應使用 $@0,而不是 $@$0。

請注意,imsimta test -match 公用程式可用於測試對映式樣,特別是測試式樣中的萬用字元運作方式。

星號萬用字元可透過從左至右處理輸入字串,最大化它們比對的內容。例如,將輸入字串 a/b/c 與式樣 */* 進行比較時,左側星號將比對 a/b,右側星號將比對其餘字元 c

$_ 修飾鍵會最小化萬用字元比對,將最小相符視為符合,從左至右處理式樣。例如,將字串 a/b/c 與式樣 $_*/$_* 進行比較時,左側 $_* 比對 a,而右側 $_* 比對 b/c

10.3.2.2 IP 比對

使用 IPv4 字首比對時,應指定 IP 位址或子網路,後跟斜線和距離字首的位數 (可選擇),在比較比對時,位數很重要。例如,以下範例比對 123.45.67.0 子網路中的所有位址︰

$(123.45.67.0/24)

若 IPv4 忽略位元比對,應指定 IP 位址或子網路,後跟斜線和檢查比對時要忽略的位數 (選擇性的)。例如,以下範例比對 123.45.67.0 子網路中的所有位址︰

$<123.45.67.0/8>

以下範例比對 123.45.67.4123.45.67.7 範圍內的所有位址:

$<123.45.67.4/2>

IPv6 比對將比對 IPv6 位址或子網路。

10.3.2.3 對映項目範本

如果指定項目中的式樣比較失敗,則不採取任何動作;系統將繼續掃描下一個項目。如果比較成功,將使用項目的右側作為範本以產生輸出字串。該範本可將輸入字串有效地取代為根據範本給出的說明建構的輸出字串。

範本中幾乎所有的字元只需在輸出中產生自身。但美元符號 ($) 是個例外。

美元符號後跟美元符號、空格或定位鍵會在輸出字串中產生美元符號、空格或定位鍵。請注意,您必須引用所有這些字元,以便將其插入輸出字串。

美元符號後跟數字 n 代表替換;美元符號後跟字母字元稱為「中介字元」。中介字元本身不會顯示在範本產生的輸出字串中,但它們會產生一些特殊的替換或處理。請參閱表 10–4,以取得特殊替換和標準處理中介字元的清單。所有其他中介字元將保留用於對映特定的應用程式。

請注意,中介字元 $C` $E$L$R 中的任何一個出現在相符式樣的範本中時,均會影響對映程序並可控制該程序是終止還是繼續。也就是說,它可以設定反覆式對映表項目,其中一個項目的輸出會成為另一個項目的輸入。如果相符式樣的範本不包含中介字元 $C$E$L$R 中的任何一個,則假設為 $E (立即終止對映程序)。

為防止無窮迴圈,將限制通過對映表的反覆次數。每次重新啟動一個傳送 (其式樣的長度等於或長於先前的傳送) 時,計數器就會遞增。如果該字串短於先前的字串,計數器將重設為零。計數器超過 10 之後,將不接受反覆對映的請求。

表 10–4 對映範本替換和中介字元

替換序列 

替換 

$n

從 0 開始從左至右計數的第 n 個萬用字元欄位。

$#...#

序列號替換。 

$]...[ 

URL 查詢;在結果中替換。 

$|...|

將指定的對映表套用至所提供的字串。 

${...} 

一般資料庫替換。 

$}domain,attribute{

增加存取每個網域屬性的能力。domain 是有問題的網域,而 attribute 是與該網域相關聯的屬性。如果網域存在且具有該屬性,則其初始值將替換為對映結果。如果屬性或網域不存在,則對映項目失敗。

attributes 可以為網域 LDAP 屬性或以下定義的特殊屬性︰

_base_dn_ - 網域中使用者項目的基底 DN

_domain_dn_ - 網域項目自身的 DN

_domain_name_ - 網域名稱 (與別名相對)

_canonical_name_ - 與網域相關聯的標準名稱

$[...]

呼叫網站提供的常式;在結果中替換。 

中介字元

說明

$C

從下一個表格項目開始繼續執行對映程序;使用此項目的輸出字串作為對映程序的新輸入字串。 

$E

立即結束對映程序;使用此項目的輸出字串作為對映程序的最終結果。$+1E 會立即結束,而不會解譯範本的剩餘部分。

$L

從下一個表格項目開始繼續執行對映程序;使用此項目的輸出字串作為新的輸入字串;耗盡表格中的所有項目後,從第一個表格項目開始再執行一次對映程序。後續比對可以使用 $C$E$R 中介字元來覆寫此條件。

$R

從對映表的第一個項目開始繼續執行對映程序;使用此項目的輸出字串作為對映程序的新輸入字串。 

$nA 

插入從位置 0 開始的目前位址的左邊第 n 個字元。如果省略了 n,則插入整個位址。 

$nX 

插入從 0 開始的郵件主機的左邊第 n 個元件。如果 n 省略,則插入整個郵件主機。 

$?x?

對映項目百分之 x 的時間成功。 

$\

強制後續文字為小寫。 

$^

強制後續文字為大寫。 

$_

使後續文字保留其原有的大小寫形式。 

$=

強制後續替換的字元承擔適當的配額作業,以便插入與大寫有關的 LDAP 搜尋篩選器。 

$:x

僅在設定指定旗標後比對。 

$;x

僅在清除指定旗標後比對。 

本節包含以下小節:

萬用字元欄位替換 ($n)

後跟數字 n 的美元符號將由式樣中符合第 n 個萬用字元的內容所取代。萬用字元從 0 開始編號。例如,以下項目將比對輸入字串 PSI%A::B,並產生結果輸出字串 b@a.psi.siroe.com


PSI$%*::*    $1@$0.psi.siroe.com

輸入字串 PSI%1234::USER 也相符,並產生 USER@1234.psi.siroe.com 做為輸出字串。輸入字串 PSIABC::DEF 不比對此項目中的式樣,且不會採取動作;亦即不會從此項目中產生輸出字串。

控制文字的大小寫 ($\、$^、$_)

中介字元 $\ 強制後續文字採用小寫,$^ 強制後續文字採用大寫,$_ 使後續文字保留其原有的大小寫形式。例如,使用對映變換區分大小寫的位址時,這些中介字元將十分有用。

處理控制 ($C、$L、$R、$E)

$C$L$R$E 中介字元會影響對映程序,可控制對映程序是否終止以及何時終止。中介字元:

對映表範本是從左至右掃描的。若要設定可能「成功」或「失敗」的項目 (例如,一般資料庫替換或隨機值控制的項目) 之 $C$L$R 旗標,請將 $C$L$R 中介字元至於可能成功或失敗的項目左側;否則,如果該項目的其餘部分失敗,將不顯示旗標。

檢查特殊旗標

某些對映探測已設定特殊旗標。這些旗標為可設定的旗標,使用 $: 和 $; 測試的一般對映表功能可測試其是否存在。$:x 導致項目僅在已設定旗標 x 的情況下比對。$;x 導致項目僅在已清除旗標 x 的情況下比對。請參閱特定的對映表描述,以取得可能適用於該表的所有特殊旗標。(請參閱表 18–2 中的 $A、$T、$S、$F 和 $D)。

如果希望在旗標檢查成功時項目成功並終止,但在旗標檢查失敗時對映程序繼續,則項目應將中介字元 $C 用於旗標檢查的左側,而將旗標 $E 用於旗標檢查的右側。

項目隨機成功或失敗 ($?x?)

對映表項目中的中介字元 $?x? 使項目的「成功」時間達到百分之 x;在其餘時間,該項目會「失敗」,並且將對映項目輸入的輸出保持不變地用做輸出。(請注意,根據對映項目,失敗的影響不一定與第一個不相符的項目相同。) x 應是指定成功百分比的實際數字。

例如,假定 IP 位址為 123.45.6.78 的系統向您的站點傳送過多的 SMTP 電子郵件,您想要使其速度減慢;可以按以下方式使用 PORT_ACCESS 對映表。假定您只允許 25% 的連線嘗試,拒絕其餘 75% 的連線嘗試。以下 PORT_ACCESS 對映表使用 $?25? 使帶有 $Y (接受連線) 的項目僅在 25% 的時間內成功;在其餘 75% 的時間內,當項目失敗時,該項目上的初始 $C 將使 MTA 從下一個項目開始繼續對映,導致連線嘗試被拒絕,並顯示 SMTP 錯誤和訊息:請稍後重試


PORT_ACCESS

   TCP|*|25|123.45.6.78|*         $C$?25?$Y
   TCP|*|25|123.45.6.78|*         $N45s$ 4.40$ Try$ again$ later

序列號替換 ($#...#)

$#...# 替換會遞增 MTA 序列檔案中儲存的值,並將該值替換至範本。當對映表輸出中需要有唯一的限定符時,這可用於產生唯一的遞增字串;例如,使用對映表產生檔案名稱時。

允許使用以下任何一種形式的語法:


$#seq-file-spec|radix|width|m#

$#seq-file-spec|radix|width#

$#seq-file-spec|radix#

$#seq-file-spec#

必要的 seq-file-spec 引數是現有 MTA 序列檔案的完整檔案規格。選擇性的 radixwidth 引數分別指定用於輸出序列值的基數 (基準) 和要輸出的數位。預設基數為 10。從 -36 至 36 範圍內的基數均可用;例如,基數 36 給出由數字 0 至 9、A 至 Z。依預設,序列值按其原始寬度列印,但如果指定的寬度需要更多位數,則輸出的左側將使用0 填補,以獲得正確的位數。請注意,如果已明確指定寬度,則基數也必須明確指定。

選擇性的 m 引數為模數。如果已指定第四個引數,則插入的值是從檔案模數 m 中擷取的序列號。預設為不執行任何模數作業。

如上所述,對映中參考的 MTA 序列檔案必須已存在。若要建立 MTA 序列檔案,請使用以下 UNIX 指令:


touch seq-file-spec


cat >seq-file-spec

               

使用對映表存取的序列號檔案必須可由所有人讀取以便正確作業。您還必須有一個 MTA 使用者帳號 (在 imta_tailor 檔案中配置為 nobody),才能使用此類序列號檔案。

URL 替換,$]...[

$]url [ 格式的替換是經過特殊處理的。url 可以是任何支援的 URL 類型,包括 file:data:。也可以使用標準 LDAP URL,使用時會忽略主機和連接埠,而使用 LDAP_HOSTLDAP_PORT 選項指定的主機和連接埠。即,應將 LDAP URL 指定為:

ldap:///dn[?attributes[?scope?filter]]

其中,上面所示的方括號字元 [] 表示 URL 的選擇性部分。dn 是必需的,並且是指定搜尋基底的辨別名稱。URL 的選擇性部分 attributesscope 以及 filter 會進一步細加區別要傳回的資訊。亦即 attributes 指定要從符合該 LDAP 查詢的 LDAP 目錄項目傳回的屬性。該 scope 可能是任何 base (預設值)、onesubfilter 說明相符項目的特性。

某些 LDAP URL 替換序列可在 LDAP 查詢 URL 中使用。URL 的長度可以是 1024 個字元。這也會套用到對映所建立的表示式,以及對其他對映的對映呼叫。

對映表替換 ($|...|)

$|mapping ;argument| 格式的替換是經過特殊處理的。MTA 會在 MTA mappings 檔案中尋找名為 mapping 的輔助對映表,並使用 argument 做為已命名輔助對映表的輸入。已命名的輔助對映表必須存在,並且必須在其輸出中設定 $Y 旗標 (如果成功);如果已命名的輔助對映表不存在,或未設定 $Y 旗標,則該輔助對映表替換將失敗,並且原來的對映項目也被視為失敗:原始輸入字串將用作輸出字串。

請注意,若您要在執行對映表替換的對映表項目中使用處理控制中介字元 (如 $C$R$L),應將處理控制中介字元置於對映表範本中對映表替換的左側;否則,對映表替換的「失敗」將意味著不顯示處理控制中介字元。

一般查詢表格或資料庫替換 (${...})

格式 ${text} 的替換是經過特殊處理的。text 部分用作存取一般查詢表格或資料庫的金鑰 (請參閱10.9.1 MTA 文字資料庫以取得更多資訊)。如果在表格中找到 text,則將替換表格中相應的範本。如果 text 不比對表格中的項目,則輸入字串將保持不變地用做輸出字串。

如果要使用一般查詢表格,則需要設定 MTA 選項 use_text_databases 的低位位元。即,將其設定為奇數。需要使用 imsimta cnbuild 來編譯並使用 imsimta reload 來重新載入可重新載入的資料,從而將對 general.txt 所做的變更編譯至 MTA 配置中。

如果您要使用一般資料庫,該資料庫應可由所有人讀取以確保其正確作業。

若您要在執行一般表格替換的對映表項目中使用處理控制中介字元 (如 $C、$R 或 $L),應將處理控制中介字元置於對映表範本中一般表格替換的左側,否則一般表格替換的「失敗」將意味著不顯示處理控制中介字元。

網站提供的常式替換 ($[...])

格式 $[image ,routine,argument ] 的替換是經過特殊處理的。image, routine, argument 部分用於尋找並呼叫用戶提供的常式。在 UNIX 上運行時,MTA 使用 dlopendlsym 從共用程式庫 image 中動態地載入和呼叫常式 routine。然後,將使用以下引數清單以函數的方式呼叫常式 routine


status = routine (argument, arglength, result, reslength)

argumentresult 是長度為 252 個位元組的字元字串緩衝區。argumentresult 將做為指標傳送至字元字串 (例如,在 C 中做為 char*)。arglengthreslength 是由參照傳送的帶正負號的長整數。在輸入中,argument 包含來自對映表範本的 argument 字串,arglength 包含該字串的長度。在傳回中,結果字串應置於 result 中,其長度應置於 reslength 中。然後,結果字串會替代對映表範本中的 $[image,routine,argument]。如果對映表替換失敗,則 routine 常式應傳回 0;如果對映表替換成功,則該常式應傳回 -1。如果替換失敗,則正常情況下,原始輸入字串將保持不變地用作輸出字串。

如果您要在執行站點提供的常式替換的對映表項目中使用處理控制中介字元 (如 $C$R$L),應將處理控制中介字元置於對映表範本中網站提供的常式替換的左側;否則,對映表替換的「失敗」將意味著不顯示處理控制中介字元。

網站提供的常式圖例機制允許使用各種複雜的方式來延伸 MTA 的對映程序。例如,在 PORT_ACCESSORIG_SEND_ACCESS 對映表中,可以執行對某些類型的載入監視服務的呼叫,其結果用於決定是否接受連線或郵件。

站點提供的共用程式庫影像 image 應可由所有人讀取。

產生 UTF-8 字串

您可以從一般對映表功能中的 Unicode 字元值中產生 UTF-8 字串。表單的 Unicode 中介字元序列︰

$&A0A0,20,A1A1&

會產生在 A0A020A1A1 位置包含字元的 UTF-8 字串。

10.4 其他 MTA 配置檔案

除了 imta.cnf 檔案之外,Messaging Server 提供多個其他配置檔案,以協助您配置 MTA 服務。表 10–5 中概述了這些檔案。本節包含以下小節:

如果對 reverseforward 或一般資料庫進行變更,則請執行指令 imsimta reload 使變更生效 (請參閱10.9.1 MTA 文字資料庫)。如果對不會影響 job_controller 的 imta.cnfmappings 檔案、別名conversionsoption.dat 檔案進行變更,則應在 imsimta restart smtp 之後執行 imsimta cnbuild。如果您對 dispatcher.cnf 進行變更,則需要執行 imsimta restart dispatcher。如果對包括在已編譯的配置 (影響工作控制器,但不影響 SMTP 伺服器) 中的配置檔案進行變更,在多數情況下,應執行以下指令︰imsimta cnbuildimsimta restart job_controller

如需有關這些指令的詳細資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「MTA Commands」

表 10–5 MTA 配置檔案

檔案 

說明 

10.4.1 別名檔案 (必要的)

實作不存在於目錄中的別名。msg-svr-base/config/aliases

10.4.2 TCP/IP (SMTP) 通道選項檔案 SMTP 選項檔案

設定通道專用的選項。msg-svr-base/config/channel_option

10.4.3 轉換檔案

由 conversion 通道用於控制郵件內文部分的轉換。 msg-svr-base/config/conversions

10.4.4 派送程式配置檔案 (強制)

派送程式的配置檔案。msg-svr-base/config/dispatcher.cnf

10.4.8 工作控制器檔案 (強制)

工作控制器使用的配置檔案。 /msg-svr-base/config/job_controller.cnf

MTA 配置檔案 (強制) 

用於位址重寫、路由以及通道定義。 /msg-svr-base/config/imta.cnf

10.3 對映檔案 (強制)

對映表的儲存庫。/msg-svr-base/config/mappings

10.4.6 選項檔案

全域 MTA 選項的檔案。/msg-svr-base/config/option.dat

10.4.7 調校檔案 (強制)

指定位置和某些調校參數的檔案。/msg-svr-base/config/imta_tailor

一般查詢表格 (可選擇) 

一般查詢功能與一般資料庫等效。可重新載入的已編譯配置的一部分。 

指定位置和某些調校參數的檔案。/msg-svr-base/config/general.txt

正向查詢表格 (可選擇) 

用於 To: 位址。與正向資料庫等效。可重新載入的已編譯配置的一部分。 

/msg-svr-base/config/forward.txt

反向查詢表格 (可選擇) 

用於 From: 位址。與反向資料庫等效。可重新載入的已編譯配置的一部分。/msg-svr-base /config/reverse.txt

10.4.1 別名檔案

別名檔案 別名用於設定未設定於目錄中的別名。特別是,根的位址是個很好的範例。如果目錄中存在相同的別名,則將忽略該檔案中設定的別名。如需有關別名和別名檔案的更多資訊,請參閱10.5 別名

變更別名檔案之後,必須重新啟動 MTA,變更才會生效。

10.4.2 TCP/IP (SMTP) 通道選項檔案

TCP/IP 通道選項檔案用於控制 TCP/IP 通道的各種特性。通道選項檔案必須儲存在 MTA 配置目錄中,並且命名為 x_option (其中 x 是通道的名稱)。例如,msg-svr-base/config/tcp_local_option。如需更多資訊,請參閱12.4.1 配置 SMTP 通道選項。如需有關所有通道選項關鍵字和語法的完整資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」

10.4.3 轉換檔案

轉換檔案 conversions 指定轉換通道如何在郵件流量上透過 MTA 執行轉換。可以選取 MTA 通訊的任何子集來進行轉換,並可以使用任何一組程式或指令程序來執行轉換處理。MTA 將查看轉換檔案,以為每個內文部分選擇適當的轉換。

如需此檔案語法的更多資訊,請參閱13.5 轉換通道

10.4.4 派送程式配置檔案

派送程式配置檔案 dispatcher.cnf 用於指定派送程式配置資訊。預設配置檔案在安裝時建立,您無需進行變更即可使用。但是,如果出於安全性或效能原因,需要修改預設配置檔案,則可以透過編輯 dispatcher.cnf 檔案來完成修改。(如需概念資訊,請參閱8.3 派送程式

派送程式配置檔案的格式與其他 MTA 配置檔案的格式類似。指定選項的行具有以下格式:

option=value

option 是選項的名稱,value 是為選項設定的字串或整數。如果 option 接受整數值,則可使用 b%v 格式的表示法指定基數,其中,b 是以10 為基礎表示的基數,而 v 是以基數 b 表示的實際值。此類選項規格根據服務群組為不同的部分,服務將套用使用以下格式的行:

[SERVICE=service-name ]

service-name 是服務的名稱。顯示在任何此類區段標記之前的初始選項規格將全域套用至所有區段。

以下是派送程式配置檔案 (dispatcher.cnf) 範例。


! The first set of options, listed without a [SERVICE=xxx]
! header, are the default options that will be applied to all
! services.
!
MIN_PROCS=0
MAX_PROCS=5
MIN_CONNS=5
MAX_CONNS=20
MAX_LIFE_TIME=86400
MAX_LIFE_CONNS=100
MAX_SHUTDOWN=2
!
! Define the services available to Dispatcher
!
[SERVICE=SMTP]
PORT=25
IMAGE=msg-svr-base/lib/tcp_smtp_server
LOGFILE=msg-svr-base/log/tcp_smtp_server.log

如需有關此檔案之參數的更多資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」

10.4.5 對映檔案

mappings 檔案定義 MTA 如何將輸入字串對映至輸出字串。

許多 MTA 元件使用針對表查詢的資訊。一般而言,此類表格用於將輸入字串變換為 (即對映至) 輸出字串。此類表格 (稱為對映表) 通常顯示為兩欄,第一欄 (左側) 給出可能的輸入字串,第二欄 (右側) 給出與輸入關聯的結果輸出字串。大多數 MTA 資料庫是此類對映表的實例。但是,MTA 資料庫檔案不提供萬用字元查詢功能,因為該功能本身效率較低,必須掃描整個資料庫以查詢與萬用字元相符的項目。

mappings 檔案為 MTA 提供支援多個對映表的工具。它還提供了完整的萬用字元工具,以及多步和反覆式對映方法。此方法的計算量比使用資料庫要大,特別是當項目很多時。但是,其靈活性帶來的實際好處是您不需要同等資料庫中的大多數項目,從而使整體開銷降低。

可以使用 imsimta test -mapping 指令測試對映表。如需有關 mappings 檔案語法和 test -mapping 指令的更多資訊,請參閱10.3 對映檔案「Sun Java System Messaging Server 6.3 Administration Reference」

變更 mappings 檔案後,必須重新啟動 MTA 或執行指令 imsimta reload

10.4.6 選項檔案

選項檔案 option.dat 指定與通道專用選項相對的全域 MTA 選項。

您可以使用選項檔案覆寫作為整體套用至 MTA 的各種參數的預設值。特別是,選項檔案可用於建立讀入配置檔案和別名檔案的各種大小的表格。您還可以使用選項檔案限制 MTA 接受的郵件的大小、指定 MTA 配置中允許的通道數目,以及設定重寫規則允許的數目等。

option.dat 中,以 #!; 開頭的行被視為註釋行,即使上一行有尾隨 \,也只表示此行將繼續。這意味著長選項 (尤其是遞送選項) 可能會包含這些字元,使用時應小心。

對於出現連續多行均以 # 或! 開頭的原始配置的傳送選項,有一種安全且方便的解決方法。

如需有關選項檔案語法的更多資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」

10.4.7 調校檔案

調校檔案 imta_tailor 用於設定各種 MTA 元件的位置。為使 MTA 正常運作,imta_tailor 檔案必須一直位於 msg-svr-base/config 目錄中。

雖然您可以編輯此檔案以反映特定安裝中的變更,但在編輯時必須十分小心。變更該檔案之後,您必須重新啟動 MTA。最好是在 MTA 關閉時進行變更。


備註 –

除非絕對必要,否則請勿編輯該檔案。


如需有關此檔案的完整資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」

10.4.8 工作控制器檔案

工作控制器用於建立和管理遞送郵件的通道工作。這些通道工作在工作控制器內的處理區中執行。可以認為處理區是通道工作執行的「地方」。處理區提供一個運算區域,可供一組工作在其中作業,而無需與處理區外部的工作競爭資源。(如需有關工作控制器概念和通道關鍵字配置的資訊,請參閱8.7 工作控制器12.5.4 通道執行工作的處理區以及12.5.5 服務工作限制。)

工作控制器檔案 job_controller.cnf 用於指定以下通道處理資訊︰

imta.cnf file 中,您可以使用 pool 關鍵字指定處理區 (定義於 job_controller.cnf 中) 的名稱。例如,以下 job_controller.cnf 範例檔案的片段定義了處理區 MY_POOL

[POOL=MY_POOL]
job_limit = 12

以下 imta.cnf 範例檔案的片段指定了通道區塊中的處理區 MY_POOL

channel_x pool MY_POOL
channel_x-daemon

如果要修改與預設處理區配置相關聯的參數或增加其他處理區,則可以透過編輯 job_controller.cnf 檔案,然後停止並重新啟動工作控制器來完成。

工作控制器配置檔案中的第一個處理區用於不指定處理區名稱的所有請求。MTA 配置檔案 (imta.cnf) 中定義的 MTA 通道,可以透過使用後跟處理區名稱的 pool 通道關鍵字,將它們的處理請求導向特定處理區。該處理區的名稱必須比對工作控制器配置中的處理區名稱。如果工作控制器無法識別請求的處理區名稱,則該請求會被忽略。

在初始配置中定義了以下處理區:DEFAULTLOCAL_POOLIMS_POOLSMTP_POOL

10.4.8.1 使用範例

通常,如果您要將某些通道的處理與其他通道的處理區分開,可以將附加的處理區定義新增至工作控制器配置。您還可以選擇使用具有不同特性的處理區。例如,您可能需要控制某些通道可以處理的同步請求數目。可以透過建立具有工作限制的新處理區來完成此作業,然後使用 pool 通道關鍵字將這些通道導入更合適的新處理區。

除了處理區定義以外,工作控制器配置檔案還包含 MTA 通道表以及工作控制器用於為每個通道處理請求所必需的指令。兩種類型的請求分別稱為「主」和「從屬」。通常,當通道的 MTA 郵件佇列中儲存有郵件時,會呼叫通道主程式。主程式會將郵件移出佇列。

呼叫從屬程式以輪詢通道並挑選該通道上任何內送郵件。由於幾乎所有 MTA 通道均具有主程式,因此大多數通道不具有或不需要從屬程式。例如,經由 TCP/IP 處理 SMTP 的通道就不使用從屬程式,因為網路服務 (SMTP 伺服器) 將根據任何 SMTP 伺服器的請求接收內送 SMTP 郵件。SMTP 通道的主程式是 MTA 的 SMTP 用戶端。

如果與通道關聯的目標系統一次無法處理多封郵件,您需要建立一個工作限制為一的新型處理區:

[POOL=single_job]
job_limit=1

另一方面如果目標系統具有足夠的平行處理能力,您可以將工作限制設定為較高的值。

範例 10–1 顯示工作控制器配置檔案範例。表 10–6 顯示可用選項。


範例 10–1 UNIX 中的工作控制器配置檔案範例


!MTA Job Controller configuration file
!
!Global defaults
tcp_port=27442         (1)
secret=never mind
slave_command=NULL     (2)
max_life_age=3600      (3)
!
!
!Pool definitions
!
[POOL=DEFAULT]         (4)
job_limit=10           (5)
!
[POOL=LOCAL_POOL]
job_limit=10
!
[POOL=IMS_POOL]
job_limit=1
!
[POOL=SMTP_POOL]
job_limit=1
!
!Channel definitions
!
!
[CHANNEL=l]             (6)
master_command=msg-svr-base/lib/l_master
!
[CHANNEL=ims-ms]
master_command=msg-svr-base/lib/ims_master
!
[CHANNEL=tcp_*]         (7)
master_command=msg-svr-base/lib/tcp_smtp_client

上述範例中的主要項目 (編號位於括號中並以粗體表示) 為:

  1. 此全域選項定義了工作控制器在其上偵聽請求的 TCP 連接埠號。

  2. 為後續 [CHANNEL] 區段設定預設 SLAVE_COMMAND

  3. 為後續 [CHANNEL] 區段設定預設的 MAX_LIFE_AGE

  4. 此 [POOL] 區段定義名為 DEFAULT 的處理區。

  5. 將此處理區的 JOB_LIMIT 設定為 10

  6. 此 [CHANNEL] 區段適用於名為 l 的通道和 UNIX 本機通道。此區段中需要的唯一定義為 master_command,工作控制器會發出該指令以執行此通道。由於通道名稱中沒有萬用字元,所以通道必須完全相符。

  7. 此 [CHANNEL] 區段適用於名稱以 tcp_* 開頭的任何通道。由於該通道名稱中包含萬用字元,它將比對名稱以 tcp_ 開頭的任何通道。

新增額外處理區的範例

工作控制器用於建立和管理遞送郵件的通道工作。這些通道工作在工作控制器內的處理區中執行。可以認為處理區是通道工作執行的「地方」。處理區提供一個運算區域,可供一組工作在其中作業,而無需與處理區外部的工作競爭資源。請注意,job_controller 中設定的工作限制是針對每個處理區。因此,例如,如果您將 SMTP_POOLjob_limit 定義為 10,則在任一指定時間內,僅能有 10 個 tcp_smtp 用戶端程序在該處理區中執行。

在某些情況下,可能需要建立額外的 tcp_* 通道 (例如,用於特別緩慢的郵件站點的 tcp 通道)。最好是讓這些通道在不同的處理區中執行。原因為,如果建立了十個不同的 tcp_* 通道且均在 SMTP_POOL 中執行,則在任一指定時間內,每個 tcp_* 通道上可能僅有一個 tcp_smtp 用戶端在執行 (取決於是否存在有目標為所有 tcp_* 通道的郵件,並且是否指定 SMTP_POOLjob_limit 定義為 10)。如果系統負載很重,並且所有佇列中均有郵件等待透過各個 tcp_* 通道傳送出去,則效率會很低。您很可能會為其他 tcp_* 通道定義額外的處理區,以防止出現競爭槽的情況。

例如,假定我們設定了以下 tcp_* 通道:


tcp_yahoo smtp mx pool yahoo_pool keyword keyword keyword
tcp-yahoo-daemon

tcp_aol smtp mx keyword keyword keyword pool aol_pool
tcp-aol-daemon

tcp_hotmail smtp mx pool hotmail_pool keyword keyword keyword 
tcp-hotmail-daemon
...
tcp_sun smtp mx pool sun_pool keyword keyword keyword
tcp-sun-daemon

為使每個新通道有十個 tcp_smtp_client 程序,我們將在 job_controller.cnf 檔案中增加以下內容:


[POOL=yahoo_pool]
job_limit=10

[POOL=aol_pool]
job_limit=10

[POOL=hotmail_pool]
job_limit=10

 ...

[POOL=sun_pool]
job_limit=10

如需有關處理區的更多資訊,請參閱12.5.4 通道執行工作的處理區

表 10–6 工作主控台配置檔案選項

選項 

說明 

一般選項

說明

INTERFACE_ADDRESS=adapter

指定工作控制器應連結至的 IP 位址介面。指定的值 (配接卡) 可以是 ANYALLLOCALHOST 中的任何一個,也可以是 IP 位址。依預設,工作控制器連結至所有位址 (相當於指定 ALLANY)。指定 INTERFACE_ADDRESS=LOCALHOST 意味著工作控制器僅接受來自本地機器內的連線。這不會影響正常作業,因為工作控制器不支援機器之間的作業。但是,這在 HA 環境中可能並不適合,因為 HA 代理程式可能正在檢查工作控制器是否回應。如果正在執行 Messaging Server 的機器處於 HA 環境中,並具有一個「內部網路」配接卡和一個「外部網路」配接卡,並且您不信任防火牆對連線至高連接埠號的封鎖功能,您應考量指定「內部網路」配接卡的 IP 位址。

MAX_MESSAGES=integer

工作控制器將以內部記憶體結構保留有關郵件的資訊。如果建立大型儲存區,則可能需要限制此結構的大小。如果儲存區中的郵件數目超過了此處指定的參數,則有關後續郵件的資訊將不會保留在記憶體中。因為郵件始終被寫入磁碟,因此不會丟失,但是在工作控制器已知的郵件數目下降至此數目的一半之前,它們不會被遞送。此時,工作控制器將模擬 imsimta cache -sync 指令,掃描佇列目錄。最小值為 10。

預設為 100000。 

SECRET=file_spec

用於保護傳送至工作控制器的請求的共用機密。 

SYNCH_TIME=time_spec

工作控制器有時會掃描磁碟上的佇列檔案以檢查是否有遺漏的檔案。依預設,此作業在工作控制器啟動四小時後開始,每隔四小時執行一次。time_spec 的格式為 HH:MM/hh:mm/hh:mm。變數 hh.mm 是事件的間隔時間 (以小時 [h] 和分鐘 [ m] 為單位)。變數 HH:MM 是事件在一天中第一次應發生的時間。例如,指定 15:45/7:15 表示事件在 15:45 開始,並從此刻起每七小時十五分鐘發生一次。

TCP_PORT=integer

指定工作控制器應在其上偵聽請求封包的 TCP 連接埠。請勿變更此選項,除非該預設與您系統上的其他 TCP 應用程式發生衝突。如果確實要變更此選項,請變更 MTA 調校檔案 msg-svr-base/config/imta_tailor 中對應的 IMTA_JBC_SERVICE 選項,以便比對。TCP_PORT 選項將在全域套用,如果它顯示在 [CHANNEL] 或 [POOL] 區段中,則將被忽略。

處理區選項

說明

JOB_LIMIT=integer

指定處理區可以同時 (平行) 使用的程序的最大數目。JOB_LIMIT 將分別套用至每個處理區;工作的最大總數是所有處理區的 JOB_LIMIT 參數的總和。如果在區段外設定,則可以由未指定 JOB_LIMIT 的任何 [POOL] 區段用做預設。在 [CHANNEL] 區段中會忽略此選項。

通道選項

說明

MASTER_COMMAND=file_spec

指定工作控制器建立的 UNIX 系統程序要執行的指令的完整路徑 (執行通道並將該通道上的外寄郵件移出佇列)。如果在區段外設定,則可以由未指定 MASTER_COMMAND 的任何 [CHANNEL] 區段用做預設。在 [POOL] 區段中會忽略此選項。

MAX_LIFE_AGE=integer

指定通道主要工作的最長存在時間 (以秒為單位)。如果沒有為通道指定該參數,則使用全域預設值。如果未指定預設值,則使用 14400 (240 分鐘)。 

MAX_LIFE_CONNS=integer

除了最長存在時間參數以外,通道主要工作的存在期限還受其詢問工作控制器是否有郵件的次數的限制。如果沒有為通道指定該參數,則使用全域預設值。如果未指定預設值,則使用 300。 

SLAVE_COMMAND=file_spec

指定工作控制器建立的 UNIX 系統程序要執行的指令的完整路徑 (執行通道並輪詢通道上內送的所有郵件)。大多數 MTA 通道不具有 SLAVE_COMMAND。如果是這種情況,則應指定保留值 NULL。如果在區段外設定,則可以由未指定 SLAVE_COMMAND 的任何 [CHANNEL] 區段用做預設。在 [POOL] 區段中會忽略此選項。

10.5 別名

MTA 提供一種功能用於支援與本地系統關聯但不一定要與實際使用者相對應的電子信箱名稱,該功能為:別名別名用於建構郵遞清單、轉寄郵件以及提供使用者名稱的同義詞。如需有關如何處理別名解析的說明,請參閱9.1.2.2 $V 中介字元

別名檔案中或別名資料庫中定義的舊式郵遞清單現在接受非定位 [capture] 參數。如果使用,[capture] 參數將使用與套用至 LDAP 中使用者或群組的 LDAP_CAPTURE 屬性指定的擷取位址相同的語義指定一個擷取位址。

指定做為 [envelope_from] 非定位別名參數、定位別名參數的錯誤或 mgrpErrorsTo LDAP 屬性值的「/」值,現在可解譯為使用內送的郵件之原始訊息封 From: 位址,同時保留郵遞清單語義之復原請求。這對設定郵遞清單以向原始寄件者報告所有格式的清單錯誤,會很有幫助。

10.5.1 別名資料庫

不鼓勵使用別名資料庫。請使用別名檔案,因為它可以使用 imsimta reload 指令動態地重新載入。

MTA 使用目錄中的資訊並建立別名資料庫。每次參考正規別名檔案時均會參考一次別名資料庫。但是,在使用正規別名檔案之前,系統會先檢查別名資料庫。實際上,資料庫被用作在使用別名檔案之前呼叫的位址重寫程式。


備註 –

資料庫本身的格式是不公開的。請勿嘗試直接編輯資料庫。請在目錄中進行所有所需的變更。


10.5.2 別名檔案

別名檔案用於設定未設定於目錄中的別名。Postmaster 別名尤其是個很好的範例。如果目錄中存在相同的別名,則將忽略該檔案中設定的別名。可以透過執行 imsimta reload 指令 (或重新啟動 MTA) 來啟動變更。以驚嘆號開頭的任何行均被視為註釋,並被忽略。空白行也會被忽略。


備註 –

還提供了用於位址處理的其他工具,如位址反向資料庫和專用對映表。但是,為獲得最佳效能,應儘可能使用重寫規則來執行位址處理。請參閱第 11 章, 配置重寫規則


此檔案中的實體行限制為 1024 個字元。可以使用反斜線 (\) 接續字元將一個邏輯行分成多個實體行。

檔案的格式如下:

user@domain: address (for users in hosted domains)

user@domain: address (for users in non-hosted domains. Example: default-domain)

例如:


! A /var/mail/ user
inetmail@siroe.com: inetmail@native-daemon

! A message store user
ms_testuser@siroe.com: mstestuser@ims-ms-daemon
         

10.5.3 在別名檔案中包含其他檔案

其他檔案可以包含在主要別名檔案中。以下格式的行可指示 MTA 讀取 file-spec 檔案:

<file-spec

檔案規格必須是完整檔案路徑規格,並且檔案的保護層級必須與主要別名檔案的保護層級相同;例如,它必須可由所有人讀取。

所包含檔案的內容將在其參照點處插入別名檔案。透過使用檔案的實際內容取代包含檔案的參考也可以達到相同效果。包含檔案的格式與主要別名檔案本身的格式相同。實際上,包含檔案本身也可以包含其他檔案。包含檔案最多可以嵌套三層。

10.6 指令行公用程式

Messaging Server 提供多個指令行公用程式,可讓您為 MTA 執行各種維護、測試和管理作業。例如,可以使用 imsimta cnbuild 指令編譯 MTA 配置、別名、對映、安全性、系統範圍的篩選器以及選項檔案。如需有關 MTA 指令行公用程式的完整資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」

10.7 SMTP 安全性和存取控制

如需有關 SMTP 安全性和存取控制的資訊,請參閱第 18 章, 郵件篩選和存取控制

10.8 記錄檔

所有 MTA 特定記錄檔均保存在記錄目錄 (msg-svr-base/log) 中。此目錄包含描述透過 MTA 的郵件通訊的記錄檔,以及描述有關特定主要程式或從屬程式資訊的記錄檔。

如需有關 MTA 記錄檔的更多資訊,請參閱第 25 章, 管理記錄

10.9 將位址從內部格式轉換為公用格式

使用位址反向文字資料庫 (也稱為反向文字資料庫) 和 REVERSE 對映表,位址可以從內部格式轉換為公用的通告格式。例如,雖然 uid@mailhost.siroe.comsiroe.com 網域中可能是一個有效位址,但它可能不是一個向外公開的適當位址。您可能希望使用 firstname.lastname@siroe.com 之類的公用位址。

Messaging Server 還提供了用於位址處理的其他工具,如別名檔案和專用對映表。但是,為獲得最佳效能,應儘可能使用重寫規則來執行位址處理。請參閱第 11 章, 配置重寫規則

本節包含以下小節:

反向文字資料庫中,每個使用者的公用位址會由目錄中使用者項目的 mail 屬性指定。

反向文字資料庫包含有效位址與公用位址之間的對映。如需更多資訊,請參閱10.9.1 MTA 文字資料庫

如果在資料庫中找到位址,則資料庫右側對應的內容將替換為該位址。如果未找到位址,則嘗試在 mappings 檔案中尋找名為 REVERSE 的對映表。如果該表格不存在或表格中沒有相符的項目,則不進行替換且重寫作業會正常終止。

如果在 mappings 檔案中找到 REVERSE 對映表,且該位址符合一個對映項目,則當該項目指定了 $Y 時,結果字串將取代該位址。$N 將捨棄對映結果。如果對映項目除指定 $Y 之外,還指定了 $D,則結果字串將再次執行反向資料庫;如果相符,則資料庫中的範本將取代對映結果 (從而取代位址)。一般 REVERSE 對映表項目 (即,套用至所有通道的項目) 的格式如下所示。請注意,旗標可以在新位址的前面,也可以在結尾處。


REVERSE

   OldAddress        $Y[Flags]NewAddress

      

通道專用的項目 (亦即僅在郵件通過特定通道時才發生的對映) 的格式如下所示。請注意,必須在 option.dat 中將 use_reverse_database 設定為 13,才能使通道專用的項目正常工作。


REVERSE

   source-channel|destination-channel|OldAddress  $Y[Flags]NewAddresS

      

REVERSE 對映表旗標顯示在表 10–7 中。

表 10–7 對映表旗標

旗標 

說明 

$Y 

使用輸出作為新位址。 

$N 

位址保持不變。 

$D 

在反向資料庫中執行輸出。 

$A 

將式樣新增為反向資料庫項目。 

$F 

將式樣新增為正向資料庫項目。 

旗標比較

說明

$:B 

僅比對標頭 (內文) 位址。 

$:E 

僅比對訊息封位址。 

$:F 

僅比對向前定位的位址。 

$:R 

僅比對向後定位的位址。 

$:I 

僅比對郵件 ID。 

10.9.1 MTA 文字資料庫

由於導致 Messaging Server 部署的不穩定,因此已停用 MTA 對 Sleepycat 資料庫的使用。(請注意,在最近的未來不會移除 Sleepycat。)因此,應改用反向、正向和一般資料庫的 MTA 文字資料庫。

若要設定文字資料庫:

  1. 準備包含資料的文字檔案。

    其格式會與 imsimta crdb 使用的格式相同:每行一個項目及兩個欄位 (由一或多個空格分隔)。檔案名稱會由 imta_tailor 中的 IMTA_GENERAL_DATAIMTA_REVERSE_DATAIMTA_FORWARD_DATA 選項指定,通常會分別指向 msg-svr-base/config/ 中的 IMTA_TABLE:general.txtIMTA_TABLE:reverse.txtIMTA_TABLE:forward.txt

    general.txt - 一般資料庫 reverse.txt - 反向資料庫forward.txt - 正向資料庫

  2. USE_TEXT_DATABASES 選項中設定適當的位元值。

    位元 0 (值 1) - 使用一般資料庫的文字檔案;位元 1 (值 2) - 使用反向資料庫的文字檔案;位元 2 (值 4) - 使用正向資料庫的文字檔案

  3. 視需要設定其他選項以啟用所需的資料庫。

    例如,USE_REVERSE_DATABASEUSE_FORWARD_DATABASE

  4. 執行 imsimta cnbuild

  5. 執行 imsimta reload

USE_TEXT_DATABASES 唯一不適用的情況是使用高度動態的資料。在這種情況下,您最好自行編寫 MTA 外掛程式,而不是依賴內建的資料庫支援。

如果文字資料庫不適用,且您想使用 crdb (Sleepycat) 資料庫支援,則可以經由建構資料庫使用樣式並適當更新程序,使用 imsimta crdbimsimta db 更新資料庫,而無須重新編譯、重新載入或重新啟動。但是,您必須處於僅能增加或更新現有項目的情況下,才能執行這項作業,但不論是增加或更新,皆可使用 imsimta crdb。否則,建構資料的方式必須為一連串的增加/刪除/變更等作業。如果未以此方式建構資料 (通常不會以此方式),更新時必須返回並取代整個資料庫,在這種情況下,會使用這類文字資料庫。

10.9.2 設定位址反向控制

reversenoreverse 通道關鍵字以及 MTA 選項 USE_REVERSE_DATABASEREVERSE_ENVELOPE 用於控制何時以及如何套用位址反向的細節。依預設,位址反向作業套用至所有位址,而不僅僅是向後定位的位址。

可以透過設定 REVERSE_ENVELOPE 系統選項的值 (預設值:1-開啟,0-關閉) 來啟用或停用位址反向。

目標通道上的 noreverse 指定位址反向不適用於郵件中的位址。reverse 指定位址反向適用。請參閱12.6.9 啟用通道特定的反向資料庫用途,以取得詳細資訊。

USE_REVERSE_DATABASE 控制 MTA 是否使用位址反向文字資料庫和 REVERSE 對映,做為替換位址的來源。值為 0 表示位址反向不用於任何通道。值為 5 (預設) 指定在 MTA 位址重寫程序重寫位址後,將位址反向套用至所有位址 (不僅僅是向後定位的位址)。值為 13 指定在 MTA 位址重寫程序重寫位址後,將位址反向套用至包含 reverse 通道關鍵字的位址 (不僅僅是向後定位的位址)。透過設定 USE_REVERSE_DATABASE 選項的位元值,可以進一步精確地指定位址反向作業。如需詳細資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「Option File Format and Available Options」

REVERSE_ENVELOPE 選項控制是否將位址反向套用至訊息封 From 位址以及郵件標頭位址。

請參閱「Sun Java System Messaging Server Administration Reference」中這些選項和關鍵字的詳細說明,以取得有關其影響的附加資訊。

10.9.2.1 一般反向對映範例

以下是一般 REVERSE 對映範例:假設 siroe.com 中內部位址的格式為 user@mailhost.siroe.com。但是,由於使用者名稱空間也是此格式,因此 user@host1.siroe.comuser@host2.siroe.com 將為 siroe.com 中的所有主機指定同一個人。以下 REVERSE 對映可以與位址反向文字資料庫結合使用:

REVERSE

   *@*.siroe.com        $0@siroe.com$Y$D
            

在此範例中,位址格式 name @anyhost.siroe.com 可變更為 name@siroe.com$D 中介字元可讓您查詢位址反向資料庫。位址反向文字資料庫應包含以下格式的項目:

user@mailhost.siroe.com     first.last@siroe.com

            

10.9.2.2 通道特定的反向對映範例

依預設,如果將路由能力範圍設定為郵件伺服器網域,則使用位址反向文字資料庫。通道專用的 REVERSE 對映表項目範例如下:

REVERSE

   tcp_*|tcp_local|binky@macho.siroe.com    $D$YRebecca.Woods@siroe.com
            

此項目告知 MTA,對於來源通道為 tcp_*、目標通道為 tcp_local 的任何外寄郵件,會將格式為 binky@macho.siroe.com 的位址變更為 Rebecca.Woods@siroe.com


備註 –

若要啟用通道專用的反向對映,必須將 option.dat 中的 USE_REVERSE_DATABASE 選項設定為 13 (預設值 = 5)


10.9.3 正向查詢表格和 FORWARD 位址對映

位址反向不會套用至訊息封 To: 位址。忽略此作業的原因非常明顯 — 訊息封 To: 位址會隨著郵件在郵件系統中的傳送不斷地被重寫和修改。路由的整體目標是將訊息封 To: 位址轉換為不斷增加的系統和電子信箱特定的格式。位址反向的標準化功能完全不適用於訊息封 To: 位址。

在任何情況下,均可以在 MTA 中使用大量工具替換訊息封 To: 位址。別名檔案、別名資料庫和一般查詢表格均提供此功能。

MTA 還提供正向查詢表格和 FORWARD 對映,可用於特殊類型的轉寄目的,如基於式樣的轉寄、來源特定的轉寄或位址的自動註冊。請注意,正向查詢表格和 FORWARD 對映主要用於某些特殊類型的位址轉寄;但是,使用 MTA 的其他轉寄機制之一可更好地執行大多數類型的位址轉寄。

訊息封 To: 位址的各種替換機制提供與反向查詢表格等效的功能,但上述說明的機制均不能提供與反向對映等效的功能。此外,對訊息封 To: 位址的對映功能的需求和可用性確實在增加。

10.9.3.1 FORWARD 對映表

FORWARD 對映表提供基於式樣的轉寄功能,還提供來源特定的轉寄機制。如果對映檔案中存在 FORWARD 對映表,則會套用至每個訊息封 To: 位址。如果此對映不存在或對映中沒有項目符合,則不會進行任何變更。

如果位址符合一個對映項目,則將測試對映結果。如果項目指定 $Y,結果字串將取代訊息封 To: 位址;如果指定 $N,將捨棄對映結果。請參閱表 10–8,以取得附加旗標清單。

表 10–8 FORWARD 輸出對映表旗標說明

旗標 

說明 

$D 

透過重寫程序再次執行輸出 

$G 

如果已啟用正向查詢表格,則透過正向查詢表格執行輸出 

$H 

停用進一步的正向查詢表格或 FORWARD 對映查詢 

$I 

將郵件儲存為 .HELD 檔案

$N 

位址保持不變 

$Y 

使用輸出作為新位址 

在執行任何正向查詢表格查詢之前,均會查詢 FORWARD 對映 (如果存在)。如果 FORWARD 對映相符且具有旗標 $G,則 FORWARD 對應的結果將對照正向查詢表格進行檢查 (如果正向查詢表格已經由 USE_FORWARD_DATABASE 的適當設定啟用)。(請注意,如果已指定通道專用的正向查詢表格,則在正向查詢表格中進行查詢之前,會將來源位址和來源通道置於 FORWARD 對映結果之前。)如果相符的 FORWARD 對映項目指定 $D,則將透過 MTA 位址重新寫入程序再次執行 FORWARD 對映結果 (及可選擇的轉寄表格查詢)。如果相符的 FORWARD 對映項目指定 $H,則在該後續位址重新寫入 (使用 $D 的結果) 期間,將不執行進一步的 FORWARD 對映或資料庫查詢)。

現在,FORWARD 對映已經有可用的輸入旗標。過去只有各種 *_ACCESS 對映才能使用這些輸入旗標。

表 10–9 FORWARD 輸入對映表旗標說明

旗標 

說明 

$A 

SASL 用於認證連線。 

$D 

NOTIFY=DELAYS 針對收件者使用。 

$E 

內送連線使用 ESMTP/EHLO。 

$F 

NOTIFY=FAILURES 針對收件者使用。 

$L 

內送連線使用 LMTP/LHLO。 

$S 

NOTIFY=SUCCESSES 針對收件者使用。 

$T 

SSL/TLS 用於安全連線。 

以下範例說明了複雜的 REVERSEFORWARD 對映的使用。假設系統或與 mr_local 通道相關聯的名為 am.sigurd.innosoft.com 的虛擬網域產生一般格式的 RFC 822 位址:

"lastname, firstname"@am.sigurd.example.com

"lastname,firstname"@am.sigurd.example.com

雖然這些位址完全合法,但它們經常使不完全符合 RFC 822 語法規則的其他郵件程式 (例如無法正確處理引用的位址的郵件程式) 產生混淆。因此,不要求引用的位址格式可用於更多的郵件程式。其中一個格式為

firstname.lastname@am.sigurd.example.com

複雜的 FORWARD 和 REVERSE 對映範例如下:

REVERSE

 *|mr_local|"*,$ *"@am.sigurd.example.com $Y"$1,$ $2"@am.sigurd.example.com
 *|mr_local|"*,*"@am.sigurd.example.com   $Y"$1,$ $2"@am.sigurd.example.com
 *|*|"*,$ *"@am.sigurd.example.com        $Y$3.$2@am.sigurd.example.com
 *|*|"*,*"@am.sigurd.example.com          $Y$3.$2@am.sigurd.example.com
 *|mr_local|*.*@am.sigurd.example.com     $Y"$2,$ $1"@am.sigurd.example.com
 *|*|*.*@am.sigurd.example.com            $Y$2.$3@am.sigurd.example.com

FORWARD

 "*,$ *"@am.sigurd.example.com            $Y"$0,$ $1"@am.sigurd.example.com
 "*,*"@am.sigurd.example.com              $Y"$0,$ $1"@am.sigurd.example.com
 *.*@am.sigurd.example.com                $Y"$1,$ $0"@am.sigurd.example.com

因此上面範例中的範例對映表的目的有三個。(1) 允許使用上面三種位址格式中的任何一種。(2) 在 mr_local 通道上僅以原有格式表示位址,並在必要時轉換格式。(3) 在所有其他通道上僅以新的未引用格式表示位址,並在必要時轉換格式。(顯示的 REVERSE 對映假設已設定了 MTA 選項 USE_REVERSE_DATABASE 中的位元 3。)

10.9.3.2 正向查詢表格

當位址轉寄需要進行自動註冊或特定於源時,可以使用正向查詢表格。請注意,使用正向查詢表格進行郵件的簡單轉寄通常不適合;別名檔案或別名查詢表格是執行此類轉寄更有效的方法。依預設,正向查詢表格根本未使用;必須經由 USE_FORWARD_DATABASE 選項明確地啟用方可使用。轉寄表格查詢在執行位址重寫、別名擴充以及所有 FORWARD 對映檢查後才執行。如果正向表格查詢執行成功,則結果替換位址將透過 MTA 位址重寫程序再次完整地執行。

有兩種機制適用於正向查詢表格,記憶體內雜湊表或普通文字資料庫。除非表格的大小過大,才建議使用雜湊表。(1,000 不算過大,100,000 才算過大)。可以透過在 use_text_databaseS 選項中設定位元 2 (值 4) 以及設定 use_forward_database 來啟用雜湊表。雜湊表可從 msg-svr-base/configure/forward.txt 中讀取,會編譯至配置的可重新載入部分,並可由 imsimta reload 指令強制重新載入使用中的 MTA 程序中。

依預設,來源文字檔案的格式為:


user1@domain1 changedmailbox1@changeddomain1
user2@domain2 changedmailbox@changeddomain2

但是,如果已透過設定 USE_FORWARD_DATABASE 選項的位元 2 來啟用來源特定的正向文字資料庫,則來源文字檔案格式為︰

source-channel|source-address|original-address changed-address

例如以下項目


tcp_limited|bob@blue.com|helen@red.com  “helen of troy”@siroe.com

將 To: 位址 helen@red.com 對映至「helen of troy」@siroe.com 僅當郵件來自 bob@blue.com,並且排入佇列的通道是 tcp_limited 時)。

如需有關正向文字資料庫的更多資訊,請參閱10.9.1 MTA 文字資料庫

10.10 控制遞送狀態通知郵件

遞送遞送狀態通知或狀態通知是電子郵件狀態,由 MTA 傳送至寄件者,並選擇性地傳送至 Postmaster。Messaging Server 可讓您自訂通知郵件的內容和語言。還可以為每種類型的遞送狀態 (例如,FAILEDBOUNCEDTIMEDOUT 等) 建立不同的郵件。此外,您可以為來自特定通道的郵件建立狀態通知。

依預設,狀態通知儲存在 msg-svr-base/config/locale/C 目錄 (由 msg-svr-base/config/imta_tailor 檔案中的 IMTA_LANG 設定指定) 中。檔案名稱如下:

return_bounced.txtreturn_delivered.txt return_header.optreturn_timedout.txtreturn_deferred.txtreturn_failed.txtreturn_prefix.txtreturn_delayed.txtreturn_forwarded.txtreturn_suffix.txt

*.txt 檔案的郵件文字應限制為每行 78 個字元。請注意,不應變更這些檔案,因為在升級為目前版本的 Messaging Server 後會覆寫它們。如果要修改這些檔案,並將它們用做唯一一組通知郵件範本檔案 (return_*.txt),請將這些檔案複製到新目錄中,並在其中編輯它們。然後,將 imta_tailor 檔案中的 IMTA_LANG 選項設定為指向包含這些範本的新目錄。如果想擁有多組通知檔案 (例如,每個語言一組),則將需要設定 NOTIFICATION_LANGUAGE 對映表。

本節包含以下小節:

10.10.1 建構和修改狀態通知

單一通知郵件自一組檔案 (三個) 建構︰ return_prefix.txt + return_ActionStatus .txt + return_suffix.txt

若要自訂或本土化通知,應為每個語言環境和/或自訂建立一組完整的 return_*.txt 檔案,並將其儲存在單獨的目錄中。例如,您可以將法語通知檔案儲存在一個目錄中,將西班牙語通知檔案儲存在另一個目錄中,並將用於特殊垃圾電子郵件通道的通知儲存在第三個目錄中。


備註 –

本版次中包含法語、德語和西班牙語的範例檔案。您可以修改這些檔案以滿足特定需要。

對於雙位元組語言 (如日語),請確定使用日語建構您的文字之後,像查看 ASCII 一樣檢視該文字,以檢查 % 字元。如果有非預期的 % 字元,請使用 %% 取代它們。


狀態通知郵件集的格式和結構描述如下。

  1. return_prefix.txt 提供適當的標頭文字以及內文的介紹資料。美語的預設語言環境如下:


    Content-type: text/plain; charset=us-asci
    Content-language: EN-US
    
    This report relates to a message you sent with the following
    header fields: %H

    非美國 ASCII 狀態通知郵件應相應地變更 charset 參數和 Content-Language 標頭值 (例如,對於法語本土化檔案,值應為 ISO-8859-1fr)。%H 是表 10–10 中定義的標頭替換序列。

  2. return_<ActionStatus >.txt 包含狀態特定的文字。ActionStatus 指郵件的 MTA 狀態類型。例如,return_failed.txt 的預設文字為:

    Your message cannot be delivered to the following recipients:%R

    return_bounced.txt 的預設文字為︰

    Your message is being returned. It was forced to return bythe postmaster.

    The recipient list for this message was:%R

  3. return_suffix.txt 包含結束文字。依預設,此檔案為空白。

表 10–10 通知郵件替換序列

替換 

定義 

%H 

延伸為郵件的標頭。 

%C 

延伸為已排入佇列的郵件單位數目1

%L 

延伸為傳回郵件前,郵件在佇列中剩餘的單位數目1

%F 

延伸為郵件可在佇列中停留的單位數目1

%S [%s] 

延伸至字母 S 或 s (如果先前延伸的數值不等於一)。範例:依據郵件排入佇列的天數,可將「%C day%s」延伸為「1 天」或「2 天」。 

%U [%u] 

延伸為使用中的時間單位小時 [hour] 或天 [day]。範例:依據郵件排入佇列的天數或小時數,以及 MTA 選項 RETURN_UNITS 的值,可將「%C %U%s」延伸為「2 天」或「1 小時」。如果已設定 RETURN_UNITS=1 (小時),並且您的站點使用本土化狀態通知郵件,則需要編輯 return_delayed.txtreturn_timedout.txt,並將所有語言 (英語除外) 中的字「天」取代為「小時」。對於法語,用 heure(s) 取代 jour(s)。對於德語,用 Stunde(n) 取代 Tag(e)。對於西班牙語,使用 hora 取代 día

%R 

延伸為郵件的收件者清單。 

%% 

% (請注意,無論為何種字元集,均將為替換序列逐位元組地掃描文字。如果使用雙位元組字元集,請檢查是否存在非預期的 % 符號。) 

1 單位由 MTA 選項檔案中的 RETURN_UNITS 選項定義,可以是小時或天 (預設)。

10.10.2 自訂和本土化遞送狀態通知郵件

遞送狀態通知郵件可以被本土化,以便將郵件傳回給使用不同語言的不同使用者。例如,可將法語通知傳回給喜好設定為法語的使用者。

本土化或自訂狀態通知郵件由兩個步驟組成:

  1. 建立一組本土化/自訂 return_*.txt 郵件檔案,並將每組檔案儲存在單獨的目錄中。這在10.10.1 建構和修改狀態通知中加以說明。

  2. 設定 NOTIFICATION_LANGUAGE 對映表。

NOTIFICATION_LANGUAGE 對映表 (位於 msg-svr-base/config/mappings) 指定一組本土化或自訂的通知郵件檔案,以視產生的郵件 (導致通知被傳送的郵件) 屬性而使用 (例如︰語言、國家/地區、網域或位址)。

剖析原始寄件者的郵件以確定狀態通知類型、來源通道、喜好的語言、傳回位址及第一收件者。視表格的建構方式而定,將依據以上的一個或多個屬性來選取一組通知檔案。

NOTIFICATION_LANGUAGE 對映表的格式如下。由於印刷排版原因,範例項目行換行。實際項目應顯示在一個實體行上。


NOTIFICATION_LANGUAGE

 dsn-type-list|source-channel|preferred-language|return-address \
|first-recipient $Idirectory-spec

NOTIFICATION_LANGUAGE
 
! Preferred-language: header value specified
!
    *|*|fr|*|*     $I/lc_messages/table/notify_french/
    *|*|es|*|*     $IIMTA_TABLE/notify_spanish/
    *|*|en|*|*     $I/imta/lang/
!
! If no Preferred-language value, then select notification based on the
! country code in the domain name. EX: PF=French Polynesia; BO=Bolivia
!
    *|*|*|*.fr|*   $I/imta/table/notify_french/
    *|*|*|*.fx|*   $I/imta/table/notify_french/
    *|*|*|*.pf|*   $I/imta/table/notify_french/
    *|*|*|*.tf|*   $I/imta/table/notify_french/
    *|*|*|*.ar|*   $I/imta/table/notify_spanish/
    *|*|*|*.bo|*   $I/imta/table/notify_spanish/
    *|*|*|*.cl|*   $I/imta/table/notify_spanish/
    *|*|*|*.co|*   $I/imta/table/notify_spanish/
    *|*|*|*.cr|*   $I/imta/table/notify_spanish/
    *|*|*|*.cu|*   $I/imta/table/notify_spanish/
    *|*|*|*.ec|*   $I/imta/table/notify_spanish/
    *|*|*|*.es|*   $I/imta/table/notify_spanish/
    *|*|*|*.gp|*   $I/imta/table/notify_spanish/
    *|*|*|*.gt|*   $I/imta/table/notify_spanish/
    *|*|*|*.gy|*   $I/imta/table/notify_spanish/
    *|*|*|*.mx|*   $I/imta/table/notify_spanish/
    *|*|*|*.ni|*   $I/imta/table/notify_spanish/
    *|*|*|*.pa|*   $I/imta/table/notify_spanish/
    *|*|*|*.ve|*   $I/imta/table/notify_spanish/
                  

備註 –

安裝時將提供一個預設 mappings.locale 檔案,此檔案將包含在 mappings 檔案中以啟用通知語言對映。若要停用通知語言對映,請註釋以下包含行:

! <IMTA_TABLE:mappings.locale

(請閱讀檔案中的註釋並修改它以滿足您的需要。)


10.10.3 產生的通知之國際化

兩個選項檔案可同時用於遞送狀態和郵件處理通知。它們旨在使產生的通知之國際化方式更為靈活。如下所示:


IMTA_LANG:return_option.dat (DSN)IMTA_LANG:disposition_option.dat (MDN)

這些檔案可用選項的說明位於表 10–11 中。

表 10–11 遞送狀態和郵件處理通知選項

選項 

說明 

DAY (DSN)

設定 RETURN_UNITS=0 (預設) 時,要插入以替換 %U%u 的文字。請注意,%U%u 之間沒有區別 (與預設大小寫不同,其中英語「Day」或「day」分別進行替換)。

DIAGNOSTIC_CODE (DSN)

覆寫用於建構 DSN 第一部分之收件者特定區段的「Diagnostic code:」文字。指定此欄位的字元集應與 DSN 第一部分中使用的字元集相同。

HOUR (DSN)

設定 RETURN_UNITS=1 時,要進行插入,以替換 %U%u 的文字。請注意,%U%u 之間沒有區別 (與預設大小寫不同,其中英語「Hour」或「hour」分別進行替換)。

n.n.n (DSN)

建構 DSN 的收件者特定部分時,系統將進行檢查,以查看是否存在其名稱符合收件者特定數值狀態的選項。如果有相符,會將相應文字插入 DSN。此外,如果上述指定的 REASON 選項產生零長度結果,則不插入 REASON 欄位。

ORIGINAL_ADDRESS (DSN)

覆寫用於建構 DSN 第一部分之收件者特定區段的「Original address:」文字。指定此欄位的字元集應與 DSN 第一部分中使用的字元集相同。 

REASON (DSN)

覆寫用於 DSN 第一部分之收件者特定區段的建構中之「Reason:」文字。指定此欄位的字元集應與 DSN 第一部分中使用的字元集相同。

RECIPIENT_ADDRESS (DSN)

覆寫用於建構 DSN 第一部分的收件者特定區段的「Recipient address:」文字。指定此欄位的字元集應與 DSN 第一部分中使用的字元集相同。 

RETURN_PERSONAL (DSN 和 MDN)

覆寫要與 From: 欄位結合使用的個人名稱欄位。此欄位應是 RFC 2047 編碼的。如果未指定 RETURN_PERSONAL MTA 選項,則使用由該選項設定的值。

SUBJECT (DSN 和 MDN)

覆寫 Subject: 欄位。僅在通知未提供自身主旨欄位時使用該值。此欄位應是 RFC 2047 編碼的。如果未使用此選項並且通知也未提供主旨,則將建構適當的主旨。 

TEXT_CHARSET (MDN)

用於轉換 MDN 的第一部分和主旨的字元集文字。預設為不執行任何轉換。 

10.10.4 其他狀態通知郵件功能

設定狀態通知郵件的必要程序在先前的小節中有所說明。以下各節描述其他功能:

10.10.4.1 封鎖大型郵件的內容傳回

通常,當郵件被退回或封鎖時,該郵件的內容會傳回至寄件者和通知郵件中的本機網域 Postmaster。如果完整地傳回大量的大型郵件,則可能使資源負載過重。若要封鎖超過一定大小的郵件內容傳回,請設定 MTA 選項檔案中的 CONTENT_RETURN_BLOCK_LIMIT 選項。

MTA 可取回與訊息封傳回位址相關聯的區塊限制,而如果未指定傳回策略,且郵件大小超過區塊限制,MTA 將設定 RET=HDRS。這樣可以避免無法傳送大型郵件的未傳遞報告。沒有和此變更相關聯的新選項或設定。

10.10.4.2 從狀態通知郵件包含的標頭中移除非美國 ASCII 字元

網際網路郵件標頭的原始格式不允許包含非美國 ASCII 字元。如果在郵件標頭中使用非美國 ASCII 字元,則將使用 RFC 2047 中說明的「MIME 標頭編碼」對這些字元進行編碼。因此,電子郵件中文的「主旨」行將實際顯示為:

Subject: =?big5?Q?=A4j=AB=AC=A8=B1=AD=B1=B0=D3=F5=A5X=AF=B2?=

顯示標頭時由電子郵件用戶端負責移除編碼。

由於 %H 範本將標頭複製到通知郵件的內文,因此已編碼的標頭文字將正常顯示。但是,如果主旨中的字元集 (此例中為「big5」) 符合 return_prefix.txt 中的 Content-Type 標頭字元集參數中的字元集,則 Messaging Server 將移除編碼。如果不符合,Messaging Server 將保留此編碼不變。

10.10.4.3 設定通知郵件遞送間隔時間

關鍵字:noticesnonurgentnoticesnormalnoticesurgentnotices

無法遞送的郵件將在指定的通道佇列中保留一段指定時間,然後再傳回至寄件者。此外,在 Messaging Server 嘗試遞送時,會將一系列狀態/警告訊息傳回給寄件者。可以使用 noticesnonurgentnoticesnormalnoticesurgentnotices 關鍵字指定郵件之間的時間和間隔時間。範例:

notices 1 2 3

對於所有郵件,將在 1 到 2 天後傳送暫態失敗狀態通知郵件。如果 3 天後仍沒有遞送郵件,則該郵件將傳回給其創建者。

urgentnotices 2,4,6,8

對於緊急郵件,將在 2 天、4 天和 6 天後傳送暫態失敗通知郵件。如果 8 天後仍沒有遞送郵件,則該郵件將傳回給其創建者。

請注意,MTA 選項檔案中的 RETURN_UNITS 選項可讓您指定單位 (小時 [1] 或天 [0])。預設為天 (0)。如果設定 RETURN_UNITS=1,則需要將傳回工作排程為每小時執行一次以及每小時獲取一次通知。每小時執行一次傳回工作時,它還會每小時更新一次 mail.log* 檔案。若要防止每小時更新 mail.log 檔案,請在 imta.tailor 檔案中設定 IMTA_RETURN_SPLIT_PERIOD 調校檔案選項為 24。傳回工作排程由 local.schedule.return_job configutil 參數控制。但請注意,預設會定期執行此指令 (請參閱4.6.2 預先定義的自動作業)。

如果未指定 notices 關鍵字,預設將使用本機 l 通道的 notices 設定。如果未對本機通道進行設定,則預設將使用 notices 3, 6, 9, 12

10.10.4.4 在狀態通知郵件中包含已改變的位址

關鍵字:includefinalsuppressfinaluseintermediate

MTA 產生通知郵件 (退回郵件、遞送接收郵件等) 時,可能同時存在可用於 MTA 的收件人位址的「原始」格式和已變更的「最終」格式。MTA 會始終將原始格式 (假設存在) 包含在通知郵件中,因為這是通知郵件的收件者 (通知郵件所關心的原始郵件寄件者) 最可能識別的格式。

includefinalsuppressfinal 通道關鍵字控制 MTA 是否還包含最終格式的位址。抑制包含最終格式的位址可能適用於要對外界「隱藏」其內部電子信箱名稱的網站。此類網站可能僅會將原始「外部」格式的位址包含在狀態通知郵件中。includefinal 為預設值,包含收件者位址的最終格式。如果原始位址存在,suppressfinal 會使 MTA 抑制狀態通知郵件中的最終位址格式。

useintermediate 關鍵字使用在清單延伸之後,但在使用者電子信箱名稱產生之前產生的中間格式。如果該資訊不可用,則使用最終格式。

10.10.4.5 對 Postmaster 傳送、封鎖和指定狀態通知郵件

依預設,除非傳回錯誤且空白 Errors-to: 標頭行或空白訊息封 From: 位址完全抑制警告,否則失敗副本和警告狀態通知郵件會傳送至 Postmaster。可透過以下小節以及表 10–12 中說明的通道關鍵字控制來進一步精確地控制傳送至 Postmaster 的通知郵件。本節包含以下小節:

傳回失敗郵件

關鍵字:sendpostnosendpostcopysendposterrsendpost

通道程式可能無法遞送郵件,原因為長期服務失敗或位址無效。發生這種情況時,MTA 通道程式會將郵件傳回給寄件者,並附帶郵件未遞送的原因說明。可選擇將所有失敗的郵件副本傳送至本機 Postmaster。這對監視郵件失敗十分有用,但可能會導致 Postmaster 必須處理過多的通訊 (請參閱表 10–12)。

警告郵件

關鍵字:warnpostnowarnpostcopywarnposterrwarnpost

除傳回郵件之外,MTA 還可以傳送未遞送郵件的詳細警告。這通常是由於 notices 通道關鍵字的設定而引起的逾時導致,雖然在某些情況下,通道程式可以在遞送嘗試失敗後產生警告郵件。警告郵件包含故障和傳送嘗試持續時間的說明。在大多數情況下,它們還包含問題郵件的標頭和前幾行。

還可以將所有警告郵件的副本傳送給本地 Postmaster (可選擇)。這對監視各個佇列的狀態可能十分有用,雖然它可能會導致 Postmaster 處理大量的通訊。關鍵字 warnpostcopywarnposterrwarnpostnowarnpost 用於控制向 Postmaster 傳送警告郵件 (請參閱表 10–12)。

空白訊息封傳回位址

關鍵字:returnenvelope

returnenvelope 關鍵字使用轉譯為一組位元旗標的單一整數值。位元 0 (值 = 1) 控制由 MTA 產生的傳回通知是使用空白訊息封位址,還是本地 Postmaster 的位址。設定該位元將強制使用本地 Postmaster 位址;清除該位元將強制使用空白位址。


備註 –

RFC 1123 強制使用空白位址。但是,某些系統無法正確處理空白訊息封 From: 位址,但可能又需要使用此選項。


位元 1 (值 = 2) 控制 MTA 是否使用本機 Postmaster 位址替代所有空白訊息封位址。此選項適用於不符合 RFC 821、RFC 822 或 RFC 1123 的不相容系統。

位元 2 (值 = 4) 禁止使用語法上無效的傳回位址。

位元 3 (值 = 8) 與 mailfromdnsverify 關鍵字相同。

Postmaster 返回的郵件內容

關鍵字:postheadonlypostheadbody

通道程式或定期郵件傳回工作將郵件傳回給 Postmaster 和原始寄件者時,Postmaster 副本可以是整個郵件,也可以僅是標頭。將 Postmaster 副本限制為標頭,可以增加使用者郵件的保密層級。但是,它本身並不保證郵件的安全性;Postmaster 和系統管理員通常可以使用 root 系統權限讀取郵件的內容 (如果他們選擇這麼做) (請參閱表 10–12)。

設定每個通道的 Postmaster 位址

關鍵字:aliaspostmasterreturnaddressnoreturnaddressreturnpersonalnoreturnpersonal

依預設,Postmaster 的傳回位址 (MTA 建構退回郵件或狀態通知郵件時所使用的位址) 為 postmaster@local-host,其中,local-host 為正式的本地主機名稱 (本機通道上的名稱),Postmaster 的個人名稱為「MTA e-Mail Interconnect」。選取 Postmaster 位址時應小心 — 非法的選取可能會導致快速的郵件迴圈,並產生大量錯誤訊息。

RETURN_ADDRESSRETURN_PERSONAL 選項可用於設定 MTA 系統的預設 Postmaster 位址和個人名稱。或者,如果需要控制每個通道,可以使用 returnaddressreturnpersonal 通道關鍵字。returnaddressreturnpersonal 均使用必需的引數分別指定 Postmaster 位址和 Postmaster 個人名稱。noreturnaddressnoreturnpersonal 為預設,表示應使用預設值。這兩個預設是經由 RETURN_ADDRESSRETURN_PERSONAL 選項,或一般預設值 (如果未設定這些選項) 建立的。

如果將 aliaspostmaster 關鍵字置於通道上,則按正式通道名稱傳送給使用者名稱 postmaster (小寫、大寫或大小寫混合) 的所有郵件將重新導向至 postmaster@local-host,其中,local-host 是正式的本地主機名稱 (本機通道上的名稱)。請注意,網際網路標準要求 DNS 中接受郵件的任何網域均需具有接收郵件的有效 Postmaster 帳號。因此,在需要集中 Postmaster 的責任,而不是為單獨的網域設定單獨的 Postmaster 帳號時,該關鍵字將十分有用。亦即由於 returnaddress 可以控制 MTA 從 Postmaster 產生通知郵件時,所使用的 Postmaster 傳回位址,aliaspostmaster 將影響 MTA 對傳送至 Postmaster 的郵件之處理。

表 10–12 用於將通知郵件傳送至 Postmaster 和寄件者的關鍵字

關鍵字 

說明 

傳回的郵件內容

指定通知的位址

notices

指定傳送通知和傳回郵件之前所消耗的時間。 

nonurgentnotices

指定為非緊急郵件傳送通知和傳回郵件之前所消耗的時間。 

normalnotices

指定為一般優先級郵件傳送通知和傳回郵件之前所消耗的時間。 

urgentnotices

指定為緊急郵件傳送通知和傳回郵件之前所消耗的時間。 

傳回的郵件

如何處理傳回郵件的失敗通知。

sendpost

啟用將所有失敗郵件的副本傳送至 postmaster 的功能。 

copysendpost

將失敗通知的副本傳送給 Postmaster (除非失敗郵件的創建者位址為空),此時,Postmaster 將收到所有失敗郵件的副本 (退回郵件或通知郵件除外)。 

errsendpost

僅當無法將失敗通知傳回給創建者時,才將其副本傳送給 postmaster。如果指定了 nosendpost,則不會向 Postmaster 傳送失敗郵件。

nosendpost

停用將所有失敗郵件的副本傳送至 postmaster 的功能。 

警告郵件

如何處理警告郵件。

warnpost

啟用將警告郵件的副本傳送至 postmaster 的功能。預設為將警告副本傳送至 Postmaster (除非使用空白 Warnings-to: 標頭或空白訊息封 From: 位址完全抑制警告)。

copywarnpost

除非未遞送郵件的創建者位址為空,否則將警告郵件的副本傳送至 postmaster。 

errwarnpost

僅當無法將警告通知傳回給創建者時,才將警告郵件的副本傳送給 postmaster。 

nowarnpost

停用將警告郵件的副本傳送至 postmaster 的功能。 

傳回的郵件內容

指定向 Postmaster 傳送整個郵件,還是僅傳送標頭。

postheadonly

僅將標頭傳回給 postmaster。將 Postmaster 副本限制為標頭,可以增加使用者郵件的保密層級。但是,這並不能保證郵件的安全性,因為 Postmaster 和系統管理員可以使用 root 系統權限讀取郵件的內容 (如果他們選擇這麼做)。

postheadbody

傳回郵件的標頭和內容。 

傳回的郵件內容

指定通知的位址

includefinal

在遞送通知中包含最終格式的位址 (收件者位址)。 

returnenvelope

控制空白訊息封傳回位址的使用。returnenvelope 關鍵字使用轉譯為一組位元旗標的單一整數值。

位元 0 (值 = 1) 控制由 MTA 產生的傳回通知是使用空白訊息封位址,還是本地 Postmaster 的位址。設定該位元將強制使用本地 Postmaster 位址;清除該位元將強制使用空白位址。 

位元 1 (值 = 2) 控制 MTA 是否使用本機 Postmaster 位址替代所有空白訊息封位址。此選項適用於不符合 RFC 821、RFC 822 或 RFC 1123 的不相容系統。

位元 2 (值 = 4) 禁止使用語法上無效的傳回位址。 

位元 3 (值 = 8) 與 mailfromdnsverify 關鍵字相同。

suppressfinal

抑制通知郵件中的最終位址格式,如果通知郵件中存在原始位址格式。 

useintermediate

使用在清單延伸之後但在使用者電子信箱名稱產生之前產生的中間格式。如果該資訊不可用,則使用最終格式。 

傳回的郵件內容

指定通知的位址

aliaspostmaster

按法定通道名稱傳送給使用者名稱 (postmaster) 的郵件被重新導向至 postmaster@local-host,其中 local-host 是本地主機名稱 (本地通道上的名稱)。 

returnaddress

指定本地 postmaster 的傳回位址。 

noreturnaddress

使用 RETURN_ADDRESS 選項值做為 Postmaster 位址名稱。

returnpersonal

設定本地 postmaster 的個人名稱。 

noreturnpersonal

使用 RETURN_PERSONAL 選項值做為 Postmaster 個人名稱。

10.11 控制郵件處理通知

郵件處理通知 (MDN) 是由 MTA 傳送給寄件者和/或 Postmaster 以報告郵件遞送處理情況的電子郵件報告。例如,如果郵件被篩選器拒絕,則會有一封 MDN 傳送給寄件者。MDN 還稱為讀取收據、確認、收據通知或遞送收據。篩選程序檔語言通常用於郵件傳送篩選和休假郵件。

10.11.1 自訂和本土化郵件處理通知郵件

修改和本土化 MDN 的說明與自訂和本土化遞送狀態通知郵件中所述的說明類似,只有一些較小的差異,如以下所述。(請參閱10.10.2 自訂和本土化遞送狀態通知郵件10.10.3 產生的通知之國際化

此對映 (稱為 DISPOSITION_LANGUAGE 對映) 與用於國際化狀態通知的 notification_language 對映表類似 (請參閱10.10.2 自訂和本土化遞送狀態通知郵件)。

但是,您可以使用以下格式探測此對映的 MDN:

type|modifiers|source-channel|header-language|return|recipient

其中:

type 為處理類型,可以是以下類型之一:displayeddispatchedprocesseddeleteddeniedfailed

modifiers 是以逗號分隔的處理修飾鍵清單。目前清單為:errorwarningsupersededexpired

source-channel 為產生 MDN 的來源通道。

header-language 為以下其中一個項目中指定的語言:accept-languagepreferred-languagex-accept-language。(MTA 使用顯示的第一個選項。)

return 是將通知傳回至的位址。

recipient 為與處理相關的位址。

處理對映的結果由兩條或三條以垂直線 (|) 分隔的資訊組成。第一條資訊是處理通知的範本檔案所在的目錄。第二條資訊是應該將獨立處理文字強制執行至的字元集。(此資訊是必需的,因為某些處理 [特別是由自動回覆回應或使用休假篩選動作的 :mime 參數產生的處理] 不部署範本檔案,因而無法從這些檔案中繼承字元集。)最後,第三條資訊是通知的覆寫主旨行。僅當對映還設定了 $T 旗標時,才使用此資訊。

以下附加範本檔案用於建構 MDN:

disposition_deleted.txt disposition_failed.txtdisposition_denied.txt disposition_prefix.txtdisposition_dispatched.txt disposition_processed.txtdisposition_displayed.txt disposition_suffix.txtdisposition_option.opt

使用這些範本檔案的方法與使用狀態通知郵件的各種 return_*.txt 檔案的方法類似。*.txt 檔案的郵件文字應限制在每行 78 個字元。

10.12 最佳化 MTA 效能

本小節說明 MTA 的各項最佳化。包含以下各節:

10.12.1 最佳化發送至郵件收信人清單的郵件 LDAP 目錄授權檢查

您可以使用中介字元的字元替換,減少發送至郵件收信人清單的郵件 LDAP 目錄授權檢查。

現在可以在 mgrpModeratormgrpAllowedBroadcastermgrpDisallowedBroadcaster 屬性中指定中介字元替換。而且,各種和位址相關的中介字元序列 ($A 適用於整個位址、$U 適用於電子信箱部分、$D 適用於網域部分) 都參考目前的訊息封 From: 位址,而且在某些情況下,可用來限制 URL 傳回可能 (或保證) 相符之項目的結果。這樣可以使授權檢查變得更有效率。

新的 MTA 選項 PROCESS_SUBSTITUTIONS 可控制是否在指定 URL 的各種 LDAP 中執行替換。這是個位元編碼值,其位元定義如下:

位元 

值 

說明 

在 mgrpDisallowedBroadcaster 中啟用替換 (如果設定) 

在 mgrpAllowedBroadcaster 中啟用替換 (如果設定) 

在 mgrpModerator 中啟用替換 (如果設定) 

在 mgrpDeliverTo 中啟用替換 (如果設定) 

16 

在 memberURL 中啟用替換 

MTA 選項 PROCESS_SUBSTITUTIONS 的預設值是 0,表示預設停用上述替換。

其中一項範例是透過 LDAP 查詢定義的動態清單,在清單上的任何人都有發佈的權限。在這種狀況下,您通常需要使用下列屬性定義清單:


mgrpAllowedBroadcaster:
ldap:///o=Sesta,c=US??sub?(&(objectClass=inetMailUser)(objectClass=inetOrgPerson))
mgrpDeliverTo:
ldap:///o=Sesta,c=US??sub?(&(objectClass=inetMailUser)(objectClass=inetOrgPerson)) 

然而,這類定義的效果是擴充清單兩次,一次是針對授權檢查,一次是用來建立實際收件者清單。這是相當頻繁的伺服器作業。另一方面,如果您新增限制,以便授權檢查只傳回包含目前訊息封 From: 位址的項目,則作業會更為有效率。首先將 PROCESS_SUBSTITUTION 設定變更為 2,然後您可以設定下列項目:


mgrpAllowedBroadcaster:
ldap:///o=Sesta,c=US??sub?(&(objectClass=inetMailUser)(objectClass=inetOrgPerson)
(mail=$A)
mgrpDeliverTo:
ldap:///o=Sesta,c=US??sub?(&(objectClass=inetMailUser)(objectClass=inetOrgPerson)) 

在此範例中,相對於 Sesta US 的全部使用者項目,這只會檢查寄件者項目的廣播授權。這會減少目錄伺服器必須針對單一 (可能經過索引) 相符項目和單一傳回值進行的作業。或者傳回整份清單,並且由 MTA 執行比對。

請注意,根據屬性是否用於授權檢查或實際清單擴充,替換可用的資訊會有所不同。對於授權屬性,整個位址 ($A)、網域 ($D)、主機 ($H) 和本機部分 ($L) 全部都來自經過認證的寄件者位址。對於清單擴充屬性,全部這些替換值都來自指定清單的訊息封收件者位址。然而,在這兩種狀況下,子位址替換 ($S) 是來自目前訊息封收件者位址。

存取擴充 URL 中子位址資訊的功能可定義 metagroups,這是建立不同群組整個集合的單一群組項目。例如,具有 mgrpDeliverTo 值為:

mgrpDeliverTo: ldap:///o=usergroup?mail?sub?(department=$S)

且對應的 PROCESS_SUBSTITUTIONS 值是 8 的群組。這可能將郵件傳送給位址格式為 group+department@domain.com 的指定部門的每一位成員。請注意,如果子位址不易辨識,轉寄對映之類的機制可用來變更語法。