Sun Java System Messaging Server 6.3 管理指南

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 文字資料庫