Sun Java logo     上一個      目錄      索引      下一個     

Sun logo
Sun Java System Messaging Server 6 2005Q1 管理指南 

第 10 章
關於 MTA 服務和配置

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


編譯 MTA 配置

每次修改 MTA 配置檔案 (如 imta.cnfmappingsaliasesoption.dat) 時,您必須透過使用 imsimta refresh 指令來重新編譯該配置 (請參閱「Sun Java System Messaging Server Administration Reference」)。該指令將配置檔案編譯為共用記憶體中的單一影像 (在 UNIX 上) 或動態連結程式庫 (NT)。

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

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

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


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

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


注意

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



對映檔案

許多 MTA 元件使用針對表查詢的資訊。此類表格用於將輸入字串變換 (即對映) 為輸出字串。此類表格稱為對映表,通常顯示為兩欄。第一欄 (左側) 提供要與之匹配的可能輸入字串 (式樣),第二欄 (右側) 給出對映輸入字串的結果輸出字串 (範本)。

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

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

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

表 10-2 中列出本書中所述的對映表。

表 10-2  Messaging Server 對映表 

對映表

頁數

描述

AUTH_REWRITE

「更多」

與 authrewrite 關鍵字配合使用,以便使用從認證作業 (SASL) 中獲得的定址資訊修改標頭和訊息封位址。

CHARSET-CONVERSION

「更多」

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

COMMENT_STRINGS

「更多」

用於修改位址標頭註釋 (括號中的字串)。

CONVERSIONS

「更多」

用於為轉換通道選取郵件通訊。

FORWARD

「更多」

用於執行轉寄,與使用 Alias 檔案或 Alias 資料庫執行的轉寄類似。

FROM_ACCESS

「更多」

用於根據訊息封 From 位址篩選郵件。如果 To 位址不適用,則使用此表格。

INTERNAL_IP

「更多」

用於識別內部系統和內部子網路。

MAIL_ACCESS

「更多」

用於根據 SEND_ACCESSPORT_ACCESS 表格中找到的組合資訊來封鎖內送的連線。

NOTIFICATION_LANGUAGE

「更多」

用於自訂或本土化通知郵件。

ORIG_MAIL_ACCESS

「更多」

用於根據 ORIG_SEND_ACCESSPORT_ACCESS 表格中找到的組合資訊來封鎖內送的連線。

ORIG_SEND_ACCESS

「更多」

用於根據訊息封 From 位址、訊息封 To 位址、源通道和目標通道來封鎖內送的連線。

PERSONAL_NAMES

「更多」

用於修改個人名稱 (尖括號分隔的位址之前的字串)。

PORT_ACCESS

「更多」

用於根據 IP 編號封鎖內送的連線。

REVERSE

「更多」

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

SEND_ACCESS

「更多」

用於根據訊息封 From 位址、訊息封 To 位址、源通道和目標通道來封鎖內送的連線。

SMS_Channel_TEXT

「更多」

用於網站定義的文字轉換。

X-ATT-NAMES

「更多」

用於從對映表中擷取參數值。

X-REWRITE-SMS-ADDRESS

「更多」

用於本地 SMS 位址的有效性檢查。

對映檔案中的檔案格式

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 指定的任何內容。每個式樣或範本最多可包含 252 個字元。對映中可以顯示的項目數不受限制 (儘管項目過多會消耗大量的 CPU 資源以及過多的記憶體)。較長的行 (超過 252 個字元) 可以使用反斜線 (\) 結束,以在下一行繼續。兩欄之間的空格以及第一欄之前的空格不能省略。

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

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

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

<file-spec

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

對映作業

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

對映作業始終由輸入字串和對映表開始。系統將按照項目在對映表中顯示的次序,從頭到尾每次掃描一個項目。每個項目的左側均用作式樣,並且將輸入字串以不區分大小寫的方式與該式樣進行比較。

對映項目式樣

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

表 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、c2 或 cn)。

$[ c1 c2 ... cn ]*

匹配隨機出現的任何字元 (c1、c2 或 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

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 位址或子網路。

對映項目範本

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

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

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

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

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

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

表 10-4  對映範本替換和圖元字元  

替換序列

替換

$n

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

$#...#

序列號替換。

$]...[

LDAP 搜尋 URL 查詢;在結果中替換。

$|...|

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

${...}

一般資料庫替換。

$}domain,attribute{

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

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

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

_domain_dn_ - 網域項目自身的 DN

_domain_name_ - 網域的名稱 (與別名相反)

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

$[...]

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

元字元

描述

$C

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

$E

立即結束對映程序;使用此項目的輸出字串作為對映程序的最終結果。

$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 的情況下匹配。請參閱特定的對映表描述,以取得可能適用於該表的所有特殊旗標。(請參閱表 17-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),才能使用此類序列號檔案。

LDAP 查詢 URL 替換 $]...[

$]ldap-url[ 格式的替換是經過特殊處理的。ldap-url 被轉換為 LDAP 查詢 URL,並且 LDAP 查詢的結果會被替換。使用標準 LDAP URL 時,會忽略主機和連接埠,而使用 LDAP_HOSTLDAP_PORT 選項指定主機和連接埠。即,應將 LDAP URL 指定為:

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

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

某些 LDAP URL 替換序列可在 LDAP 查詢 URL 中使用。

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

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

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

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

${text} 格式的替換是經過特殊處理的。text 部分用作存取一般查找表格或資料庫的密鑰。資料庫是使用 imsimta crdb 公用程式產生的。如果在表格中找到 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 字串。


其他 MTA 配置檔案

imta.cnf 檔案之外,Messaging Server 還提供幾個其他配置檔案,以幫助您配置 MTA 服務。表 10-5 中概述了這些檔案。請注意,一旦修改 MTA 配置檔案 (如 imta.cnfmappingsaliasesoption.dat),您必須重新編譯配置 (請參閱「Sun Java System Messaging Server Administration Reference」中的 imsimta refresh 指令)。

表 10-5  MTA 配置檔案 

檔案

描述

Alias 檔案 (強制)

實作未顯示在目錄中的別名。
msg_svr_base/config/aliases

TCP/IP (SMTP) 通道選項檔案
(亦稱為 SMTP 選項檔案)

設定通道特定的選項。
msg_svr_base/config/channel_option

轉換檔案

轉換通道用來控制郵件內文部分的轉換。
msg_svr_base/config/conversions

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

派送程式的配置檔案。
msg_svr_base/config/dispatcher.cnf

工作控制器檔案 (強制)

Job Controller.
/msg_svr_base/config/job_controller.cnf 使用的配置檔案

MTA 配置檔案 (強制)

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

對映檔案 (強制)

對映表的儲存庫。
/msg_svr_base/config/mappings

選項檔案

全域 MTA 選項檔案。
/msg_svr_base/config/option.dat

調校檔案 (強制)

指定位置和某些調校參數的檔案。
/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

Alias 檔案

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

變更 aliases 檔案後,您必須重新啟動 MTA 或發出指令 imsimta reload

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

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

轉換檔案

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

如需有關此檔案語法的更多資訊,請參閱「轉換通道」。

派送程式配置檔案

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

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

option=value

option 是選項的名稱,value 是為選項設定的字串或整數。如果 option 可以接受整數 value,則可以使用 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

如需有關此檔案參數的更多資訊,請參閱 Messaging Server Reference Manual

對映檔案

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

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

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

您可以使用 imsimta test -mapping 指令測試對映表。如需有關 mappings 檔案的語法和 test -mapping 指令的更多資訊,請參閱對映檔案以及 Messaging Server Reference Manual

變更 mappings 檔案後,您必須重新啟動 MTA 或發出指令 imsimta reload

選項檔案

選項檔案 option.dat 用於指定全域 MTA 選項,而不是通道特定的選項。

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

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

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

如需有關選項檔案語法的更多資訊,請參閱 Messaging Server Reference Manual

調校檔案

調校檔案 imta_tailor 用於設定各種 MTA 元件的位置。為使 MTA 正確運作,imta_tailor 檔案必須始終位於 msg_svr_base/config 目錄中。

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


注意

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


如需有關此檔案的完整資訊,請參閱 Messaging Server Reference Manual

工作控制器檔案

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

工作主控台檔案 job_controller.cnf 用於指定以下通道處理資訊:

imta.cnf 檔案中,您可以使用 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

使用範例

通常,如果您要將某些通道的處理與其他通道的處理區分開,可以將附加的處理區定義新增至工作控制器配置。您還可以選擇使用具有不同特性的處理區。例如,您可能需要控制某些通道可以處理的同步請求的數目。您可以透過建立具有工作限制的新處理區來完成此作業,然後使用 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)
anon_host=0
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

如需有關處理區的更多資訊,請參閱「通道執行工作的處理儲存區」。如需有關工作控制器檔案語法的更多資訊,請參閱 Messaging Server Reference Manual

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

選項

描述

一般選項

描述

INTERFACE_ADDRESS=adapter

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

MAX_MESSAGES=integer

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

預設為 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

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

MAX_LIFE_CONNS=integer

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

SLAVE_COMMAND=file_spec

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


別名

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

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

Alias 資料庫

使用 Alias 資料庫,您會很失望。請使用 aliases 檔案,因為它可以使用 imsimta reload 指令動態地重新載入。

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


注意

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


Alias 檔案

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


注意

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


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

檔案的格式如下:

user@domain: <address> (對於託管網域中的使用者)

user
@domain: <address> (對於非託管網域中的使用者。範例:預設網域)

例如:

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

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

在 Alias 檔案中包含其他檔案

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

<file-spec

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

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


指令行公用程式

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


SMTP 安全性和存取控制

如需有關 SMTP 安全性和存取控制的資訊,請參閱第 17 章「郵件篩選和存取控制」第 19 章「配置安全性和存取控制」


記錄檔

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

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


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

使用位址反向資料庫 (也稱為反向資料庫) 和 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

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

REVERSE

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

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

表 10-7  REVERSE 對映表旗標 

旗標

描述

$Y

使用輸出作為新位址。

$N

位址保持不變。

$D

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

$A

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

$F

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

旗標比較

描述

$:B

僅匹配標頭 (內文) 位址。

$:E

僅匹配訊息封位址。

$:F

僅匹配向前定位的位址。

$:R

僅匹配向後定位的位址。

$:I

僅匹配郵件 ID。

設定位址反向控制

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

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

目標通道上的 noreverse 指定對郵件中的位址不套用位址反向。reverse 指定套用位址反向。請參閱「Sun Java System Messaging Server Administration Reference」,以取得詳細資訊。

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

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.innosoft.com $Y"$1,$ $2"@am.sigurd.innosoft.com
 *|mr_local|"*,*"@am.sigurd.innosoft.com $Y"$1,$ $2"@am.sigurd.innosoft.com
 *|*|"*,$ *"@am.sigurd.innosoft.com $Y$3.$2@am.sigurd.innosoft.com
 *|*|"*,*"@am.sigurd.innosoft.com $Y$3.$2@am.sigurd.innosoft.com
 *|mr_local|*.*@am.sigurd.innosoft.com $Y"$2,$ $1"@am.sigurd.innosoft.com
 *|*|*.*@am.sigurd.innosoft.com $Y$2.$3@am.sigurd.innosoft.com

 

FORWARD

 "*,$ *"@am.sigurd.innosoft.com $Y"$0,$ $1"@am.sigurd.innosoft.com
 "*,*"@am.sigurd.innosoft.com $Y"$0,$ $1"@am.sigurd.innosoft.com
 *.*@am.sigurd.innosoft.com $Y"$1,$ $0"@am.sigurd.innosoft.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 時)。


控制遞送狀態通知郵件

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

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

return_bounced.txtreturn_delivered.txtreturn_header.optreturn_timedout.txtreturn_deferred.txtreturn_failed.txtreturn_prefix.txtreturn_delayed.txtreturn_forwarded.txt 以及 return_suffix.txt

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

建構和修改狀態通知

單一通知郵件是由三個檔案建構的:return_prefix.txt + return_ActionStatus.txt + return_suffix.txt

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


注意

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

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


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

  1. return_prefix.txt 提供適當的標頭文字以及內文的介紹資料。美語的預設語言環境如下:
  2. Content-type:text/plain; charset=us-asci
    Content-language:
    EN-US

    本報告適用於您使用以下標頭欄位傳送的郵件:%H

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

  3. return_<ActionStatus>.txt 包含狀態特定的文字。ActionStatus 指郵件的 MTA 狀態類型。例如,return_failed.txt 的預設文字為:
  4. 您的郵件無法遞送至以下收件人: %R

    return_bounced.txt 的預設文字為:

    您的郵件已傳回。由Postmaster 強制傳回。

    此郵件的收件人清單為: %R

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

表 10-9  通知郵件替換序列

替換

定義

%H

延伸為郵件的標頭。

%C

延伸為已形成佇列的郵件單位數目 1

%L

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

%F

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

%S [%s]

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

%U [%u]

延伸為使用中的時間單位1 (小時 [小時] 或天 [天])。範例:依據郵件形成佇列的天數或小時數,以及 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(s) 取代 dia(s)。

%R

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

%%

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

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

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

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

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

  1. 建立一組本土化/自訂 return_*.txt 郵件檔案,並將每組檔案儲存在單獨的目錄中。此步驟在建構和修改狀態通知中有描述。
  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

dsn-type-list 是以逗號分隔的遞送狀態通知類型的清單。如果指定多個類型,它們必須以逗號分隔且不留空格 (空格將終止對映表項目的式樣)。這些類型如下:

source-channel 是產生通知郵件的通道,即郵件目前形成佇列的通道。例如,ims-ms 是郵件儲存的遞送佇列,tcp_local 是外寄 SMTP 佇列等。

preferred-language 是正在處理的郵件 (為其產生通知的郵件) 所使用的語言。此資訊的源首先是 accept_language 欄位。如果該欄位不存在,則使用 Preferred-language:標頭欄位和 X-Accept-Language: 標頭欄位。如需標準語言代碼值的清單,請參閱檔案 msg_svr_base/config/languages.txt

如果此欄位不為空,將是為 Preferred-language:X-Accept-language: 標頭行指定的郵件創建者。因此,您可能會在此欄位中發現無意義的字元。

return-address 是初始郵件的訊息封 From: 位址。這是要向其傳送通知郵件的訊息封位址,因此也是要使用語言的指示符號。

first-recipient 是原始郵件定位的訊息封 To: 位址 (第一個位址,如果郵件無法傳送至多個收件者)。例如,在通知「您的郵件無法傳送至 dan@siroe.com」中,dan@siroe.com 是報告的訊息封 To:位址。

directory-spec 是包含要使用的 return_*.txt 檔案的目錄 (如果對映表探測匹配)。請注意,$I 必須位於目錄規格之前。

例如,在目錄 /lc_messages/table/notify_french/ 中儲存法語通知檔案 (return_*.txt),以及在目錄 /lc_messages/table/notify_spanish/return_*.txt 檔案中儲存西班牙語通知檔案的網站,可能會使用以下表格。請注意,每個項目必須以一個或多個空格開頭,並且項目之間不能有空白行。

程式碼範例 10-2  通知語言對映表 ─ 範例

 

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

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


國際化產生的通知

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

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

這些檔案可用的選項之描述位於表 10-10 中。

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

選項

描述

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 的第一部分和主旨的字元集文字。預設為不執行任何轉換。

其他狀態通知郵件功能

設定狀態通知郵件的基本程序已在前面各節中描述。以下各節描述其他功能。

封鎖大型郵件的內容傳回

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

從狀態通知郵件包含的標頭中移除非美國 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.txtContent-Type 標頭字元集參數中的字元集,則 Messaging Server 將移除編碼。如果不匹配,Messaging Server 將保留此編碼不變。

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

關鍵字: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 參數控制。

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

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

關鍵字:includefinalsuppressfinaluseintermediate

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

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

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

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

依預設,除非返回錯誤,或使用空白 Errors-to: 標頭行或空白訊息封 From: 位址完全抑制警告,否則失敗副本與警告狀態通知郵件將會傳送至 postmaster。可以透過以下各節和表 10-11 中描述的大量通道關鍵字來進一步精確地控制遞送給 Postmaster 的通知郵件。

傳回失敗郵件

關鍵字:sendpostnosendpostcopysendposterrsendpost

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

警告郵件

關鍵字: notices, nonurgentnotices, normalnotices, urgentnotices

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

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

空白訊息封傳回位址

關鍵字: 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-11。)

設定每個通道的 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-11  用於將通知郵件傳送至 Postmaster 和寄件者的關鍵字

關鍵字

描述

傳回的郵件內容

指定通知的位址

notices

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

nonurgentnotices

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

normalnotices

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

urgentnotices

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

傳回的郵件

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

sendpost

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

copysendpost

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

errsendpost

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

nosendpost

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

警告郵件

如何處理警告郵件。

warnpost

啟用將警告郵件的副本傳送至 Postmaster 的功能。預設為將警告副本傳送至 Postmaster (除非使用空白 Warnings-to: 標頭或空白訊息封 From: 位址完全抑制警告,否則失敗副本與警告狀態通知郵件將會傳送至 postmaster。

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 個人名稱。


控制郵件處理通知

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

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

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

此對映 (稱為 DISPOSITION_LANGUAGE 對映) 與用於國際化狀態通知的 notification_language 對映表 (程式碼範例 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.txt
disposition_denied.txt disposition_prefix.txt
disposition_dispatched.txt disposition_processed.txt
disposition_displayed.txt disposition_suffix.txt
disposition_option.opt

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



上一個      目錄      索引      下一個     


Copyright 2005 Sun Microsystems, Inc. 版權所有。