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

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

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


備註 –

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


反向資料庫中,每個使用者的公用位址會由目錄中使用者項目的 mail 屬性指定。私有位址或內部位址由 mailAlternativeAddress 屬性指定。分佈清單同樣如此。

反向資料庫包含所有有效位址與此公用位址之間的對映。反向資料庫通常位於 MTA 資料庫目錄中。該資料庫是使用 msg_svr_base/config/imta_tailor 檔案中 IMTA_REVERSE_DATABASE 選項指定其名稱的檔案,依預設,為檔案 msg_svr_base/data/db/reversedb.*

如果在資料庫中找到位址,則資料庫右側對應的內容將替換為該位址。如果未找到位址,則嘗試在 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。 

設定位址反向控制

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

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

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

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

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

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

一般反向對映範例

以下是一般 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

            

通道特定的反向對映範例

依預設,如果將路由能力範圍設定為郵件伺服器網域,則使用位址反向資料庫。通道專用的 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)。


正向查找表格和 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 時)。