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

正向查找表格和 FORWARD 位址對映

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

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

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

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

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 對映或資料庫查詢)。

以下範例說明了複雜的 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。

正向查詢表格

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

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

轉寄資料庫是一個 MTA crdb 資料庫,是使用 crdb 公用程式從來源文字檔案建立的。依預設,源文字檔案的格式為:


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

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

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 時)。