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

Sun logo
Sun Java System Messaging Server 6 2004Q2 管理指南 

第 13 章
使用預先定義的通道

首次安裝 Messaging Server 時,有數個通道已經定義 (請參見表格 13-1)。本章描述如何在 MTA 中使用預先定義的通道定義。

您應先閱讀第 10 章「關於 MTA 服務和配置」,然後再閱讀本章。如需有關在 imta.cnf 檔案中配置重寫規則的資訊,請參閱第 11 章「配置重寫規則」

本章包含以下小節:

defaults 通道在配置通道預設中描述。

表格 13-1 預先定義的通道

通道

定義

defaults

用於為各種通道指定預設關鍵字。請參閱配置通道預設

l

僅適用於 UNIX。用於決定路由方式,以及使用 UNIX 郵件工具提交郵件。

ims-ms

遞送郵件至本地儲存。

native

僅適用於 UNIX。遞送郵件至 /var/mail。(請注意,Messaging Server 不支援 /var/mail 存取。使用者必須使用 UNIX 工具從 /var/mail 儲存存取郵件。)

pipe

用於透過站點提供的程式或程序檔執行遞送。管道通道執行的指令由管理員透過 imsimta 程式介面進行控制。

reprocess
process

這兩個通道用於延遲且離線之郵件的處理。reprocess 通道通常如同來源或目標通道,是隱藏的,process 通道則如同其他 MTA 通道,是可見的。

defragment

提供重新組合 MIME 分段郵件的方法。

conversion

對經由 MTA 的郵件逐個執行內文部分的轉換。

bitbucket

用於需要被捨棄的郵件。

inactive/deleted

用於處理目錄中已被標記為非作用中/刪除的使用者的郵件。通常會退回郵件,並將自訂退回郵件傳回給郵件的寄件者。

hold

用於保留使用者的郵件。例如,當使用者從一台郵件伺服器遷移至另一台郵件伺服器時。

sms

支援對 SMS 閘道的單向電子郵件傳送。

tcp_local
tcp_intranet
tcp_auth
tcp_submit
tcp_tas

實施經由 TCP/IP 的 SMTP。多重執行緒 TCP SMTP 通道包括在派送程式控制下執行的多重執行緒 SMTP 伺服器。外送的 SMTP 郵件由通道程式 tcp_smtp_client 進行處理,並在工作控制器控制下依需要執行。

tcp_local 接收來自遠端 SMTP 主機的內送郵件。根據您是否使用智慧主機/防火牆配置,將外送郵件直接傳送至遠端 SMTP 主機,或將外送郵件傳送至智慧主機/防火牆系統。

tcp_intranet 接收和傳送企業內部網路中的郵件。

tcp_auth 用作 tcp_local 的切換通道;經認證的使用者切換至 tcp_auth 通道,以避免轉送封鎖功能的限制。

tcp_submit 在預留的提交連接埠 587 上接受通常來自使用者代理程式的郵件提交作業 (請參閱 RFC 2476)。

tcp_tas 是一種由執行統一郵件傳送的站點使用的特殊通道。


使用管道通道遞送郵件至程式

使用者可能想將送進的郵件傳送至程式,而不是自己的電子信箱。例如,使用者可能想將送進的郵件傳送至郵件排序程式。pipe 通道使用針對使用者的站點提供的程式來執行郵件遞送。

若要使用程式遞送,您必須先將程式註冊為可由 pipe 通道進行呼叫。使用 imsimta program 公用程式可達此目的。此公用程式會對您註冊為可由 pipe 通道呼叫的每個指令指定唯一名稱。然後,一般使用者可以指定方法名稱,作為他們的 mailprogramdeliveryinfo LDAP 屬性之值。

例如,若要新增一個 UNIX 指令 myprocmail 作為可由使用者呼叫的程式,您應先使用 imsimta program 公用程式註冊該指令,如下例所示。此範例是要註冊一個名為 myprocmail 的程式,該程式用於執行帶有引數 -d username 的程式 procmail,而且是以該使用者之身份執行:

imsimta program -a -m myprocmail -p procmail -g "-d %s" -e user

確定可執行檔存在於 programs 目錄 msg_svr_base/data/site-programs 中。還要確定執行許可權被設定為「others」。

若要讓使用者存取此程式,使用者的 LDAP 項目中必須包含以下屬性和值:

maildeliveryoption:program
mailprogramdeliveryinfo:myprocmail

如需有關 imsimta program 公用程式的詳細資訊,請參閱「Messaging Server Reference Manual」

替代遞送程式必須遵循以下退出碼和指令行引數限制:

退出碼限制。使用 pipe 通道呼叫的遞送程式必須傳回有意義的錯誤程式碼,以讓通道瞭解是否將郵件移出佇列、遞送以便以後處理或傳回郵件。

如果子程序結束,而退出碼為 0 (EX_OK),則表示郵件遞送成功,並已從 MTA 佇列中移除。如果子程序結束,而退出碼為 71、74、75 或 79 (EX_OSERREX_IOERREX_TEMPFAILEX_DB),則表示發生暫時性錯誤,郵件遞送延遲。如果傳回任何其他退出碼,則郵件將被作為無法遞送的郵件傳回給創建者。這些退出碼均在系統標頭檔案 sysexits.h 中定義。

指令行引數。遞送程式可以帶有任意多個固定引數以及可變引數 %s,該可變引數表示使用者執行程式時所用的使用者名稱,或是 Postmaster (「inetmail」) 執行程式時所用的使用者名稱+網域。例如,以下指令行使用 procmail 程式來遞送收件者的郵件:

/usr/lib/procmail -d %s


配置原生 (/var/mail) 通道

選項檔案可以用於控制原生通道的各種特徵。此原生通道選項檔案必須儲存在 MTA 配置目錄中,並命名為 native_option (例如 msg_svr_base/config/native_option)。

選項檔案由多行組成。每行都包含一個選項設定。選項設定的形式為:

option=value

其中 value 可以是字串或整數,具體取決於選項的需求。

表格 13-2 本地通道選項  

選項

描述

FORCE_CONTENT_LENGTH

(0 或 1;僅適用於 UNIX)

如果 FORCE_CONTENT_LENGTH=1,則 MTA 會在遞送至原生通道的郵件中新增 Content-length: 標頭行,並使通道在遇到行首出現「From」的情形時,不使用「>From」語法。如此可讓本地 UNIX 郵件與 Sun 較新的郵件工具相容,但可能會與其他 UNIX 郵件工具不相容。

FORWARD_FORMAT (字串)

指定使用者 .forward 檔案的位置。字串 %u 表示它可以由每個使用者 ID 替換。字串 %h 表示它可以由每位使用者的主目錄替換。如果未明確指定此選項,則預設的運行方式對應為:

FORWARD_FORMAT=%h/.forward

REPEAT_COUNT (整數)
SLEEP_TIME (整數)

當 MTA 嘗試遞送新郵件時,避免使用者的新郵件檔案被另一程序鎖定,這些選項可用於控制應嘗試重試原生通道程式的次數與頻率。如果經過指定次數的重試後,仍然無法開啟檔案,郵件將保留在原生佇列中,原生通道下次執行時會再次嘗試遞送新郵件。

REPEAT_COUNT 選項控制通道程式在放棄前嘗試開啟郵件檔的次數。REPEAT_COUNT 預設為 30 (嘗試 30 次)。

SLEEP_TIME 選項控制通道程式在兩次嘗試之間等待的秒數。SLEEP_TIME 預設為 2 (重試間隔時間 2 秒)。

SHELL_TIMEOUT (整數)

控制通道等待 .forward 中的使用者 shell 指令完成的時間 (以秒為單位)。一旦逾時,郵件便會被傳回給原始寄件者,並隨附類似「等待 user 的 shell 指令 command 完成時逾時」的錯誤郵件。預設為 600 (10 分鐘)。

SHELL_TMPDIR (目錄特定)

控制在遞送至 shell 指令時,本地通道建立其暫存檔時所在的位置。依預設,此種暫存檔建立在使用者的主目錄中。使用此選項,管理員可以選擇在其他 (單一) 目錄中建立暫存檔。例如:

SHELL_TMPDIR=/tmp


使用保留通道暫時保留郵件

保留通道用於保留暫時被阻止接收新郵件的收件者之郵件。郵件被保留的原因有,使用者名稱已變更,或使用者的電子信箱已從一台郵件主機移至另一台郵件主機或已從一個網域移至另一個網域。還可能有其他原因需要暫時保留郵件。

如果郵件需要保留,則會使用與導向至重新處理通道相同的機制,導向至保留通道,即置於 msg_svr_base/queue/hold 目錄中。如此一來,訊息封的 To: 位址就不會變更。郵件會被寫入保留通道佇列,即作為 msg-server/queue/hold 目錄下的 ZZxxx.HELD 檔案。這樣即可避免被工作控制器察覺,因而得以「保留」。使用 imsimta qm dir -held 指令可檢視 .HELD 檔案清單。可以選取這些郵件,並可使用 imsimta qm -release 指令釋放這些郵件。釋放時會將郵件名稱變更為 ZZxxx.00,並通知工作控制器。然後與保留通道關聯的主要程式 reprocess.exe 便會處理這些郵件。因此,會使用一般重寫機制處理郵件 (以及 To: 位址)。

如需有關 imsimta qm 指令的更多資訊,請參閱「Sun Java System Messaging Server Administration Reference」


轉換通道

轉換通道可讓您對 MTA 中的指定郵件任意執行逐個內文部分的處理。(請注意,內文部分不同於郵件,一封郵件可包含多個內文部分,例如附件便如此。此外,內文部分由 MIME 標頭指定和描述。)這項處理可由任何站點提供的程式或指令程序來完成,可處理諸如轉換文字或影像格式、病毒掃描、語言轉譯等工作。可以選取 MTA 通訊流的各種郵件類型進行轉換,並可針對每種類型的郵件內文部分指定特定的程序和程式。

使用本章之前,必須先瞭解通道的概念 (請參閱通道)。如需有關使用轉換通道進行病毒掃描的增補資訊,請參閱 Messaging Server 文件網站下方的「Messaging Server Technical Notes」(位址為 http://docs.sun.com/db/coll/S1_MsgTechNotes)。

實施轉換通道包括 A) 選取要處理的郵件通訊流;B) 指定不同郵件的處理方式。這些程序將在以後詳細論述。


預設轉換通道會在 MTA 配置檔 (imta.cnf) 中自動建立。此通道可直接使用,無需進行任何修改。


本節包含以下小節:

MIME 簡介

轉換通道使 MIME (多重目的網際網路郵件延伸) 標頭行的使用更加廣泛。管理員需要具備郵件結構與 MIME 標頭欄位的有關知識。如需有關 MIME 的完整資訊,請參閱 RFC 1806、2045 至 2049 和 2183 為方便起見,在此只簡單介紹 MIME。

郵件結構

一個簡單的郵件由標頭與內文組成。標頭位於郵件頂端,其中包含特定控制資訊,例如日期、主旨、寄件者及收件者。內文是指標頭下第一個空行之後的所有內容。MIME 指定了一種建構更複雜的郵件的方法,使郵件中可以包含多個內文部分,甚至在內文部分中嵌套內文部分。這類郵件稱為多部分郵件,而如前所述,可使用轉換通道逐個內文部分地執行郵件處理。

MIME 標頭

MIME 規格為內文部分定義了一組標頭行。包括 MIME-VersionContent-typeContent-Transfer-EncodingContent-ID 以及 Content-disposition。轉換通道最常使用 Content-typeContent-disposition 這兩種標頭。部分 MIME 標頭行的範例如下所示:

Content-type:APPLICATION/wordperfect5.1;name=Poem.wpc
Content-transfer-encoding:BASE64
Content-disposition:attachment; filename=Poem.wpc
Content-description:"Project documentation Draft1 wordperfect format"


MIME 標頭行不同與一般的非 MIME 標頭行,如 To:Subject: 以及 From:。基本上,只要述及轉換通道,MIME 標頭行就會以字串 Content- 開頭。


Content-type 標頭

MIME Content-Type 標頭描述內文部分的內容。Content-Type 標頭格式舉例如下:

type 描述內文部分的內容類型。類型範例有 TextMultipartMessageApplicationImageAudio 以及 Video

subtype 進一步描述內容類型。每個 Content-type 各自擁有一組子類型。例如:text/plainapplication/octet-stream 以及 image/jpeg。MIME 郵件的內容子類型由 IANA (網際網路指定號碼授權中心) 指定並列出。清單副本位於 http://www.isi.edu/in-notes/iana/assignments/media-types/media-types

parameter 特定於各對 Content-type/subtype。例如,charsetname 參數如下所示:

charset 參數指定文字郵件的字元集。name 參數在資料要寫入檔案時,為其指定建議使用的檔案名稱。


Content-Type 的值、subtypes 及參數名稱都不區分大小寫。


Content-disposition 標頭

MIME Content-disposition 標頭提供內文部分的展示資訊。它通常加入到附件中,指定附件內文部分是顯示 (inline) 還是顯示為檔案名稱以供複製 (attachment)。Content-disposition 標頭的格式如下:

Content-disposition: disposition_type; parameter1=value;parameter2=value...

disposition_type 通常為 inline (顯示內文部分) 或 attachment (顯示為可儲存的檔案)。Attachment 通常具有參數 filename,其值用於指定儲存檔案的建議名稱。

如需有關 Content-disposition 標頭的詳細資訊,請參閱 RFC2183。

選取通訊流以進行轉換處理

與其他 MTA 通道不同,轉換通道通常不在位址或 MTA 重寫規則中指定。郵件使用 CONVERSIONS 對映表 (由 imta_tailor 檔案中的 IMTA_MAPPING_FILE 參數指定) 傳送至轉換通道。表格中的項目格式如下:

MTA 處理每封郵件時,都會探測 CONVERSIONS 對映表 (如果存在)。如果 source-channel 是發出郵件的通道,而 destination-channel 是郵件發往的通道,則執行以下 CONVERT 動作 (Yes 表示 MTA 將郵件從其 destination-channel 轉移到轉換通道;如果找不到相符項目,則讓郵件在常規目標通道中形成佇列)。


形式為 user@conversion.localhostnameuser@conversion 的位址會透過轉換通道進行路由,而不論 CONVERSIONS 對映表為何。


下例將所有非內部郵件 (源自網際網路或發往網際網路的郵件) 路由至轉換通道。

CONVERSIONS

   IN-CHAN=tcp_local;OUT-CHAN=*;CONVERT   Yes
   IN-CHAN=*;OUT-CHAN=tcp_local;CONVERT     Yes

第一行指定將處理來自 tcp_local 通道的郵件。第二行指定還將處理發往 tcp_local 通道的郵件。tcp_local 通道處理所有發往網際網路與來自網際網路的郵件。由於預設為不通過轉換通道,因此其他任何郵件都不會通過轉換通道。

請注意,這是相當基本的表格,對於使用更多自訂配置的站點 (例如,使用多個外送至網際網路 tcp_* 通道或多個自網際網路內送 tcp_* 通道的站點) 可能不夠。

控制轉換處理

當郵件傳送到轉換通道時,會被逐個內文部分地進行處理。處理由 MTA conversions 檔案進行控制,該檔案由 imta_tailor 檔案中的 IMTA_CONVERSION_FILE 選項指定 (預設:msg_svr_base/conversions)。conversions 檔案包含以行分隔的項目,這些項目用於限定:1) 要處理的內文部分的類型,以及 2) 處理方式。

每個項目由一行或多行組成,各行包含一個或多個 name=value 參數子句。參數子句中的值符合 MIME 慣例。如果值相符,則除最後一行之外,每行都必須以分號 (;) 結尾。此檔案中的實體行不能超過 252 個字元。您可以使用反斜線 (\) 延續字元,將一個邏輯行分割成多個實體行。若要終止項目,只需在一行結尾不加分號,或者加入一個或多個空行,或兩者併用。

下面是 conversion 檔案項目的簡單範例:

程式碼範例 13-1 conversions 檔案項目

out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1;
  out-type=application; out-subtype=msword; out-mode=block;
  command="/usr/bin/convert -in=wordp -out=msword ‘INPUT_FILE‘ \ ‘OUTPUT_FILE’"

子句 out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1 用於判定內文部分。即指定將要轉換的部分之類型。系統會讀取各部分的標頭,並擷取其 Content-Type: 及其他標頭資訊。然後從頭至尾掃描 conversion 檔案中的項目,檢查其中所有的 in-* 參數以及 OUT-CHAN 參數 (如果有)。如果所有這些參數都符合將要處理的內文部分之對應資訊,則執行 command=delete= 子句所指定的轉換,並設定 out-* 參數。

如果不符合,則將該部分與下一個 conversions 檔案項目進行比對。完成所有內文部分的掃描與處理 (假定存在完全合格的相符項目) 後,將郵件傳送至下一個通道。如果沒有相符項目,則不進行任何處理,並將郵件傳送至下一個通道。

out-chan=ims-ms 指定只轉換目標為 ims-ms 通道的郵件部分。in-type=applicationin-subtype=wordperfect5.1 指定郵件部分的 MIME Content-type 標頭必須為 application/wordperfect5.1

透過其他 in-* 參數,可進一步判定郵件部分。(請參閱表格 13-6。)上述項目會對具有以下 MIME 標頭行的郵件部分,觸發轉換動作:

Content-type:APPLICATION/wordperfect5.1;name=Draft1.wpc
Content-transfer-encoding:BASE64
Content-disposition:attachment; filename=Draft1.wpc
Content-description:"Project documentation Draft1 wordperfect format"

程式碼範例 13-1 中的三個 conversion 檔案判定參數之後,接下來的兩個參數 out-type=applicationout-subtype=msword 指定取代 MIME 標頭行將會附加至「已處理」內文部分。out-type=applicationout-subtype=msword 指定外送郵件的 MIME Content-type/subtypeapplication/msword

請注意,由於 in-typeout-type 參數相同,則無需設定 out-type=application,因為轉換通道預設為外送內文部分的原始 MIME 標籤。可以透過其他輸出參數為外送內文部分指定其他 MIME 標籤。

out-mode=block (程式碼範例 13-1) 指定站點提供的程式將會傳回的檔案類型。換言之,它指定檔案的儲存方式,以及轉換通道讀回傳回之檔案的方式。例如,html 檔案以文字模式儲存,而 .exe 程式或 zip 檔案則以區塊/二進位模式儲存。模式是一種描述要讀取之檔案使用特定儲存格式的方式。

程式碼範例 13-1 中的最後一個參數

command="/usr/bin/convert -in=wordp -out=msword ‘INPUT_FILE’ ‘OUTPUT_FILE’"

指定針對內文部分應執行的動作。

command= 參數指定某個程式將對內文部分執行。/usr/bin/convert 是假定的指令名稱;-in=wordp-out=msword 是假定的指令行引數,用於指定輸入及輸出文字的格式;INPUT_FILEOUTPUT_FILE 是轉換通道環境參數 (請參閱使用轉換通道環境變數),分別指定包含原始內文部分的檔案,以及程式儲存其轉換後的內文部分時所用的檔案。

如果不對內文部分執行指令,只需將 command 參數替換為 DELETE=1,即可刪除該郵件部分。


每當 conversions 檔案修改後,您都必須重新編譯配置 (請參閱「Sun Java System Messaging Server Administration Reference」中的 imsimta refresh 指令)。


轉換通道資訊流程

資訊流程如下:包含內文部分的郵件進入轉換通道。轉換通道剖析郵件,逐一處理各部分。接著,轉換通道判定內文部分,即透過比對其 MIME 標頭行與判定參數,確定是否應處理該內文部分。如果內文部分通過判定,則開始進行轉換處理。如果 MIME 或內文部分資訊將會傳送到轉換程序檔,則會儲存在資訊傳送參數所指定的環境變數中 (表格 13-3)。

此時會對內文部分執行動作參數指定的動作。此動作通常是將內文部分刪除或將其傳送至程序檔內含的程式。程序檔處理完該內文部分後,會將其傳回轉換通道,以重新組合成處理後的郵件。程序檔也可透過轉換通道輸出選項,將資訊傳送至轉換通道。資訊可以是要加入輸出內文部分的 MIME 標頭行、要傳回給郵件寄件者的錯誤文字,或指示 MTA 啟動某些動作 (例如退回、刪除或保留郵件) 的特殊指令。

最後,轉換通道會依輸出參數的指定來取代輸出內文部分的標頭行。

使用轉換通道環境變數

對郵件內文部分作業時,環境變數通常用於將 MIME 標頭行資訊或整個內文部分傳送至站點提供的程式或從站點提供的程式傳送 MIME 標頭行資訊或整個內文部分。例如,程式可以要求 Content-typeContent-disposition 標頭行資訊以及郵件內文部分。站點提供的程式之主要輸入內容,通常是從檔案中讀取的郵件內文部分。處理完內文部分後,程式需要將其寫入檔案,以供轉換通道讀取。此種資訊傳送方式就透過轉換通道環境變數來實現。

使用 parameter-symbol-* 參數或使用一組預先定義的轉換通道環境變數 (請參見表格 13-4),即可在 conversions 檔案中建立環境變數。

以下 conversions 檔案項目和送進的標頭顯示,如何使用環境變數將 MIME 資訊傳送至站點提供的程式。

conversions 檔案項目:

in-channel=*; in-type=application; in-subtype=*;
  parameter-symbol-0=NAME; parameter-copy-0=*;
  dparameter-symbol-0=FILENAME; dparameter-copy-0=*;
  message-header-file=2; original-header-file=1;
  override-header-file=1; override-option-file=1;
  command="/bin/viro-scan500.sh ‘INPUT_FILE’ ‘OUTPUT_FILE’"

送進的標頭:

Content-type:APPLICATION/msword; name=Draft1.doc
Content-transfer-encoding:BASE64
Content-disposition:attachment; filename=Draft1.doc
Content-description:"Project documentation Draft1 msword format"

in-channel=*; in-type=application; in-subtype=* 指定處理來自任何 application 類型的輸入通道的郵件內文部分。

parameter-symbol-0=NAME 指定第一個 Content-type 參數值 (範例中的 Draft1.doc) 儲存在名為 NAME 的環境變數中。

parameter-copy-0=* 指定輸入內文部分的所有 Content-type 參數都複製到輸出內文部分。

dparameter-symbol-0=FILENAME 指定第一個 Content-disposition 參數值 (範例中的 Draft1.doc) 儲存在名為 FILENAME 的環境變數中。

dparameter-copy-0=* 指定輸入內文部分的所有 Content-disposition 參數都複製到輸出內文部分。

message-header-file=2 指定將郵件的原始標頭作為一個整體 (最外層的郵件標頭) 寫入環境變數 MESSAGE_HEADERS 所指定的檔案中。

original-header-file=1 指定將含括 MESSAGE/RFC822 的部分之原始標頭寫入環境變數 ORIGINAL_HEADERS 所指定的檔案中。

override-header-file=1 指定從環境變數 OUTPUT_HEADERS 所指定的檔案中讀取 MIME 標頭,以置換含括 MIME 的部分中的原始 MIME 標頭行。$OUTPUT_HEADERS 是執行轉換時建立的即時暫存檔。站點提供的程式會使用此檔案在轉換過程中儲存變更的 MIME 標頭行。而轉換通道會在重新組合內文部分時,從此檔案中讀取 MIME 標頭行。請注意,只有 MIME 標頭行可以修改。其他一般的非 MIME 標頭行無法由轉換通道變更。

override-option-file=1 指定轉換通道從 OUTPUT_OPTIONS 環境變數所命名的檔案中讀取轉換通道選項。請參閱使用轉換通道輸出選項

command="msg_svr_base/bin/viro-scan500.sh" 指定要對郵件內文部分執行的指令。

表格 13-3 轉換通道環境變數  

環境變數

描述

INPUT_ENCODING

內文部分原始具備的編碼。

INPUT_FILE

包含原始內文部分的檔案之名稱。站點提供的程式應讀取此檔案。

INPUT_HEADERS

包含內文部分原始標頭行的檔案之名稱。站點提供的程式應讀取此檔案。

INPUT_TYPE

輸入郵件部分的 MIME Content-type

INPUT_SUBTYPE

輸入郵件部分的 MIME 內容子類型。

INPUT_DESCRIPTION

輸入郵件部分的 MIME content-description

INPUT_DISPOSITION

輸入郵件部分的 MIME content-disposition

MESSAGE_HEADERS

檔案名稱,該檔案包含含括郵件 (不只是內文部分) 最外層的原始標頭,或是最直接含括 MESSAGE/RFC822 部分的內文部分之標頭。站點提供的程式應讀取此檔案。

OUTPUT_FILE

站點提供的程式用於儲存其輸出的檔案之名稱。站點提供的程式應建立並寫入此檔案。

OUTPUT_HEADERS

站點提供的程式用於儲存含括部分的 MIME 標頭行的檔案之名稱。站點提供的程式應建立並寫入此檔案。請注意,檔案應包含實際 MIME 標頭行 (而非 option=value 行),後接一空行作為最後一行。另請注意,只有 MIME 標頭行可以修改。其他一般的非 MIME 標頭行無法由轉換通道變更。

OUTPUT_OPTIONS

站點提供的程式讀取轉換通道選項時所用的檔案之名稱。請參閱使用轉換通道輸出選項

使用轉換通道輸出選項

轉換通道輸出選項 (表格 13-4) 是動態變數,用於將資訊與特殊指令從轉換程序檔傳送至轉換通道。例如,在內文部分處理期間,程序檔可能會傳送特殊指令,要求轉換通道退回郵件,並在傳回的郵件中加入一些錯誤文字,表明郵件帶有病毒。

輸出選項透過在所需的轉換項目中設定 OVERRIDE-OPTION-FILE=1 來啟動。隨後,輸出選項由程序檔依需要設定,並儲存在環境變數檔案 OUTPUT_OPTIONS 中。程序檔處理完內文部分後,轉換通道會從 OUTPUT_OPTIONS 檔案中讀取這些選項。

OUTPUT_OPTION 變數是轉換通道讀取選項時所用的檔案之名稱。通常會用作即時暫存檔來傳送資訊。以下範例顯示程序檔使用輸出選項將錯誤訊息傳回給寄出病毒郵件的寄件者。

/usr/local/bin/viro_screen2k $INPUT_FILE # 執行病毒過濾

if [ $?-eq 1 ]; then
   echo "OUTPUT_DIAGNOSTIC=’Virus found and deleted.’"> $OUTPUT_OPTIONS
   echo "STATUS=178029946" >> $OUTPUT_OPTIONS
else
   cp $INPUT_FILE $OUTPUT_FILE # 郵件部分沒問題
fi

在此範例中,$OUTPUT_OPTIONS 定義的檔案中會加入系統診斷訊息與狀態碼。如果將 $OUTPUT_OPTIONS 暫存檔讀出,您會看到如下內容:

OUTPUT_DIAGNOSTIC="發現病毒並刪除。"
STATUS=178029946

其中 OUTPUT_DIAGNOSTIC='發現病毒並刪除’ 一行告知轉換通道在郵件中加入文字發現病毒並刪除

178029946 是指在 msg_svr_base/include/deprecated/pmdf_err.h 中發現的每個 pmdf_err.h 檔案的 PMDF__FORCERETURN 狀態。此狀態碼指示轉換通道將郵件退回給寄件者。(如需有關使用特殊指令的更多資訊,請參閱使用轉換通道輸出退回、刪除或保留郵件。)

完整的輸出選項清單如下表所示。

表格 13-4 轉換通道輸出選項

選項

描述

OUTPUT_TYPE

輸出郵件部分的 MIME 內容類型。

OUTPUT_SUBTYPE

輸出郵件部分的 MIME 內容子類型。

OUTPUT_DESCRIPTION

輸出郵件部分的 MIME 內容描述。

OUTPUT_DIAGNOSTIC

郵件被轉換通道強制退回給寄件者時作為郵件的一部分納入的文字。

OUTPUT_DISPOSITION

輸出郵件部分的 MIME content-disposition

OUTPUT_ENCODING

用於輸出郵件部分的 MIME 內容傳送 encoding

OUTPUT_MODE

MIME Mode,轉換通道會以此模式寫入輸出郵件部分,而收件者會以此模式讀取輸出郵件部分。

STATUS

轉換程式的結束狀態。通常是一個特殊的指令,可讓轉換通道啟動某個動作。完整的指令清單位於 msg_svr_base/include/deprecated/pmdf_err.h 中。

含括 MESSAGE/RFC822 的部分中的標頭

對郵件部分執行轉換時,轉換通道會存取含括 MESSAGE/RFC822 的部分中的標頭;如果沒有含括 MESSAGE/RFC822 的部分,則存取郵件標頭。站點提供的程式可能會用到此標頭內的資訊。

如果選取的項目具有 ORIGINAL-HEADER-FILE=1,則含括 MESSAGE/RFC822 的部分的所有原始標頭行會被寫入 ORIGINAL_HEADERS 環境變數所指定的檔案。如果 OVERRIDE-HEADER-FILE=1,則轉換通道會讀取含括部分的標頭並將其用作 ORIGINAL_HEADERS 環境變數所指定的檔案之內容。

從轉換項目呼叫對映表

out-parameter-* 的值可以在任意命名的對映表中儲存和擷取。此功能用於重新命名用戶端傳送的附件,這些用戶端使用通用名稱 (如 att.dat) 來傳送所有附件,而不論這些附件是 postscriptmswordtext 還是其他格式。這是一種重新標示該部分的通用方法,可便於其他用戶端 (例如 Outlook) 透過讀取副檔名來開啟該部分。

從對映表擷取參數值的語法如下:

‘mapping-table-name:mapping-input[$Y, $N]’

$Y 傳回參數值。如果找不到相符的項目或者傳回 $N,則轉換檔案項目中的參數會被忽略或視為空白字串。缺少相符項目或 $N 不會導致轉換項目本身中斷。

請考量以下對映表:

X-ATT-NAMES

   postscript       temp.PS$Y
   wordperfect5.1   temp.WPC$Y
   msword           temp.DOC$Y

上述對映表的以下轉換項目會使附件的通用檔案名稱被替換為特定的檔案名稱:

out-chan=tcp_local; in-type=application; in-subtype=*;
   in-parameter-name-0=name; in-parameter-value-0=*;
   out-type=application; out-subtype=’INPUT-SUBTYPE’;
   out-parameter-name-0=name;
   out-parameter-value-0=」’X-ATT-NAMES:\\’INPUT_SUBTYPE\\’’」;
   command="cp  ‘INPUT_FILE’  ‘OUTPUT_FILE’"

在上述範例中,out-chan=tcp_local; in-type=application; in-subtype=* 指定要處理的郵件必須來自 tcp_local 通道,並且 content-type 標頭為 application/* (* 表示可以使用任何子類型)。

in-parameter-name-0=name; in-parameter-value-0=* 額外指定郵件必須具有參數類型 name=* (* 同樣表示可以使用任何參數值)。

out-type=application; 指定處理後的郵件之 MIME Content-type 參數為 application

out-subtype=’INPUT-SUBTYPE’; 指定處理後的內文部分之 MIME subtype 參數為 INPUT-SUBTYPE 環境變數,即輸入 subtype 的原始值。因此,如果要將

   Content-type:application/xxxx; name=foo.doc

   變更為

   Content-type:application/msword; name=foo.doc

   可以使用

   out-type=application; out-subtype=msword

out-parameter-name-0=name; 指定輸出內文部分的第一個 MIME Content-type 參數為類型 name=

out-parameter-value-0=’X-ATT-NAMES:\\’INPUT_SUBTYPE\\’’; 表示使用第一個 MIME subtype 參數值,並搜尋對映表 X-ATT-NAMES,查看是否有相符的 subtype。如找到相符項目,name 參數會接收 X-ATT-NAMES 對映表中指定的新值。因此,如果參數類型為 mswordname 參數將為 temp.DOC

使用轉換通道輸出退回、刪除或保留郵件

本節描述如何使用轉換通道選項來退回、刪除或保留郵件。基本程序如下:

  1. 在適當的轉換檔案項目中設定 OVERRIDE-OPTION-FILE=1。這會告知轉換通道從 OUTPUT_OPTIONS 檔案中讀取輸出選項。
  2. 使用轉換程序檔確定需要對特定郵件內文部分執行何種動作。
  3. 在程序檔中,透過將 STATUS=directive_code 選項寫入 OUTPUT_OPTIONS 檔案,指定該動作的特殊指令。

完整的特殊指令清單位於 msg_svr_base/include/deprecated/pmdf_err.h 中。轉換通道常用的特殊指令如下:

表格 13-5 轉換通道常用的特殊指令

名稱

六進位值

十進位值

PMDF__FORCEHOLD

0x0A9C86AA

178030250

PMDF__FORCERETURN

0x0A9C857A

178029946

PMDF__FORCEDELETE

0x0A9C8662

178030178

以下透過範例詳細說明這些指令的功能。

退回郵件

若要使用轉換通道退回郵件,請在適當的 conversions 檔案項目中設定 OVERRIDE-OPTION-FILE=1,並將下行加入您的轉換程序檔:

   echo "STATUS=178029946" >> $OUTPUT_OPTIONS

如果要在退回的郵件中加入簡短的文字字串,請將下行加入轉換程序檔:

   echo OUTPUT_DIAGNOSTIC=text-string >> $OUTPUT_OPTIONS

其中文字字串如下:「從您的機器傳送的郵件含有病毒,現已被移除。執行電子郵件附件時請多加注意。

有條件地刪除郵件部分

根據部分所包含的內容有條件地刪除部分可能很有用。這項功能可使用輸出選項實現。相對地,DELETE=1 轉換參數子句可無條件地刪除郵件部分。

若要使用輸出選項刪除郵件部分,請在適當的轉換檔案項目中設定 OVERRIDE-OPTION-FILE=1,並將下行加入您的轉換程序檔:

   echo "STATUS=178030178" >> $OUTPUT_OPTIONS

保留郵件

根據部分所包含的內容有條件地保留郵件可能很有用。若要使用輸出選項刪除郵件部分,請在適當的轉換檔案項目中設定 OVERRIDE-OPTION-FILE=1,並將下行加入您的轉換程序檔:

   echo "STATUS=178030250" >> $OUTPUT_OPTIONS

這會請求轉換通道將郵件作為 .HELD 檔案保留在轉換通道佇列中。

轉換通道範例

以下範例中的 CONVERSIONS 對映與一組轉換規則,會將傳送到假定通道 tcp_docuprint 中的 GIF、JPEG 與 BITMAP 檔案自動轉換成 PostScript。這些轉換中有些會使用假定的 /usr/bin/ps-converter.sh 進行變換。其中包含一項將 WordPerfect 5.1 檔案轉換成 Microsoft Word 檔案的附加規則。

CONVERSIONS

      IN-CHAN=*;OUT-CHAN=tcp_docuprint;CONVERT    Yes

!

out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1;
  out-type=application; out-subtype=msword; out-mode=block;
  command="/bin/doc-convert -in=wp -out=msw   ’INPUT_FILE’  ’OUTPUT_FILE’"

out-chan=tcp_docuprint; in-type=image; in-subtype=gif;
  out-type=application; out-subtype=postscript; out-mode=text;
  command="/bin/ps-convert -in=gif -out=ps   ’INPUT_FILE’  ’OUTPUT_FILE’"

out-chan=tcp_docuprint; in-type=image; in-subtype=jpeg;
  out-type=application; out-subtype=postscript; out-mode=text;
  command="/bin/ps-convert -in=jpeg -out=ps   ’INPUT_FILE’  ’OUTPUT_FILE’"

out-chan=tcp_docuprint; in-type=image; in-subtype=bitmap;
  out-type=application; out-subtype=postscript; out-mode=text;
  command="/bin/ps-convert -in=bmp -out=ps   ’INPUT_FILE’  ’OUTPUT_FILE’"

自動偵測阿拉伯語字元集

已加入新的 auto_ef 程式以自動偵測阿拉伯語字元集。

您可以從轉換通道呼叫 auto_ef 程式,以自動偵測並標記阿拉伯語字元集中大多數未標記或未正確標記的文字郵件。這些未標記或錯誤標記的郵件通常是從使用阿拉伯語的 Yahoo 或 Hotmail 傳送來的。

沒有正確的字元集標記,許多郵件用戶端便無法正確顯示這些郵件。

如果郵件包含 MIME 內容類型標頭,則 auto_ef 程式將僅檢查和處理這些包含文字/一般內容類型的郵件。如果郵件未標記有 MIME 內容類型標頭,則 auto_ef 將無條件地加入文字/一般內容類型。

若要啟動或啟用此程式,您必須:

  1. 編輯 msg_svr_base/config 目錄中的對映檔案,以為您選擇的源通道和目標通道啟用轉換通道。若要為從網際網路進入您本地使用者的所有郵件啟用轉換通道,請將與以下類似的部分加入您的對映檔案:
  2. CONVERSIONS

        IN-CHAN=tcp*;OUT-CHAN=ims-ms;CONVERT YES

    請注意,INOUT 通道取決於您的配置。如果您要在中繼 MTA 上進行部署,則必須修改通道以符合您的配置。例如,

    IN-CHAN=tcp*;OUT-CHAN=tcp*;CONVERT YES

    或者,您可以按如下所示為所有通道開啟它:

    IN-CHAN=*;OUT-CHAN=*;CONVERT YES

  3. msg_svr_base/config 目錄中建立轉換檔案,該檔案由 Messaging Server 使用者擁有並讀取,並包含以下內容:
  4. !
    in-channel=*; out-channel=*;
      in-type=text; in-subtype=*;
      parameter-copy-0=*; dparameter-copy-0=*;
      original-header-file=1; override-header-file=1;
      command="
    msg_svr_base/lib/arabicdetect.sh"
    !

  5. 使用以下指令編譯您的 MTA 配置:
  6. msg_svr_base/sbin/imsimta cnbuild

  7. 使用以下指令重新啟動:
  8. msg_svr_base/sbin/imsimta restart

表格 13-6 轉換參數  

參數

描述

判定參數 (指定郵件在被轉換之前必須要符合的參數。)

OUT-CHAN、
OUT-CHANNEL

轉換時必須符合的輸出通道 (允許使用萬用字元)。僅當郵件的目標為此指定通道時,此項目指定的轉換才會執行。

IN-CHAN、
IN-CHANNEL

轉換時必須符合的輸入通道 (允許使用萬用字元)。僅當郵件來自此指定通道時,此項目指定的轉換才會執行。

IN-TYPE

轉換時必須符合的輸入 MIME 類型 (允許使用萬用字元)。僅當此欄位符合內文部分的 MIME 類型時,指定的轉換才會執行。

IN-SUBTYPE

轉換時必須符合的輸入 MIME 子類型 (允許使用萬用字元)。僅當此欄位符合內文部分的 MIME 子類型時,此項目指定的轉換才會執行。

IN-PARAMETER-NAME-n

轉換時必須符合的輸入 MIME Content-Type 參數名稱;n = 0, 1, 2...此參數可與 IN-PARAMETER-VALUE-n 配合使用,以用其保留的名稱及值明確標識參數。

IN-PARAMETER-VALUE-n

轉換時必須符合的對應於 IN-PARAMETER-NAME 的輸入 MIME Content-Type 參數值。僅當此欄位符合內文部分的 Content-Type 參數清單中對應參數時,此項目指定的轉換才會執行。允許使用萬用字元。

IN-PARAMETER-DEFAULT-n

如果不存在相應參數,則使用預設的輸入 MIME Content-Type 參數值。內文部分中未指定此類參數時,使用此值作為 IN-PARAMETER-VALUE-n 測試的預設。

IN-DISPOSITION

轉換時必須符合的輸入 MIME Content-Disposition

IN-DPARAMETER-NAME-n

轉換時必須符合的輸入 MIME Content-Disposition 參數名稱;n = 0, 1, 2...此參數可與 IN-DPARAMETER-VALUE-n 配合使用,以用其保留的名稱及值明確標識參數。

IN-DPARAMETER-VALUE-n

轉換時必須符合的對應於 IN-DPARAMETER-NAME 的輸入 MIME Content-Disposition 參數值。僅當此欄位符合內文部分的 Content-Disposition: 參數清單中對應參數時,此項目指定的轉換才會執行。允許使用萬用字元。

IN-DPARAMETER-DEFAULT-n

如果不存在相應參數,則使用預設的輸入 MIME Content-Disposition 參數值。內文部分中未指定此類參數時,使用此值作為 IN-DPARAMETER-VALUE-n 測試的預設。

IN-DESCRIPTION

轉換時必須符合的輸入 MIME Content-Description

IN-SUBJECT

含括 MESSAGE/RFC822 的部分中的輸入 Subject

TAG

輸入標記,依郵件清單 CONVERSION_TAG 參數設定。

輸出參數 (指定內文部分的轉換後的輸出設定。)

OUT-TYPE

輸出 MIME 類型,與輸入類型不同時使用。

OUT-SUBTYPE

輸出 MIME 子類型,與輸入子類型不同時使用。

OUT-PARAMETER-NAME-n

輸出 MIME Content-Type 參數名稱;n = 0, 1, 2...

OUT-PARAMETER-VALUE-n

輸出 MIME Content-Type 參數值,對應於 OUT-PARAMETER-NAME-n

PARAMETER-COPY-n

Content-Type 參數清單,要從輸入內文部分的 Content-Type 參數清單複製到輸出內文部分的 Content-Type: 參數清單;n=0, 1, 2...複製時 MIME 參數使用相同名稱,必須符合 IN-PARAMETER-NAME-n 子句。

OUT-DISPOSITION

輸出 MIME Content-Disposition,與輸入 MIME Content-Disposition 不同時使用。

OUT-DPARAMETER-NAME-n

輸出 MIME Content-Disposition 參數名稱;n=0, 1, 2...

OUT-DPARAMETER-VALUE-n

輸出 MIME Content-Disposition 參數值,對應於 OUT-DPARAMETER-NAME-n

DPARAMETER-COPY-n

Content-Disposition: 參數清單,要從輸入內文部分的 Content-Disposition: 參數清單複製到輸出內文部分的 Content-Disposition: 參數清單;n = 0, 1, 2,...複製時使用 MIME 參數的名稱作為引數,必須符合 IN-PARAMETER-NAME-n 子句。引數中可以使用萬用字元。尤其是引數 * 表示複製所有的原始 Content-Disposition: 參數。

OUT-DESCRIPTION

輸出 MIME Content-Description,與輸入 MIME Content-Description 不同時使用。

OUT-MODE

讀取並儲存轉換檔案時所使用的模式。其值應為 BLOCK (二進位且可執行) 或 TEXT

OUT-ENCODING

郵件重新組合時套用於轉換檔案的編碼。

動作參數 (指定對郵件部分執行的動作。)

COMMAND

為執行轉換而執行的指令。為執行轉換而執行的指令。此參數為必需參數;如果未指定指令,此項目會被忽略。使用 / 指定路徑,而非 \。範例:command="D:/tmp/mybat.bat"

DELETE

0 或 1。如果有設定此旗標,則郵件部分會被刪除。(如果郵件中只有此部分,則以單一空白文字部分替換。)

RELABEL

RELABEL=1 會將 MIME 標籤重新標示為輸出參數指定的任何內容。Relabel=0 不執行任何動作。通常會對標示錯誤的部分進行重新標示 (例如:從 Content-type:application/octet-stream 變更為 Content-type:application/msword),讓使用者可以「按兩下」來開啟某個部分,而無需將此部分先儲存為一個檔案,然後再透過某個程式將其開啟。

SERVICE-COMMAND

SERVICE-COMMAND=command 會執行站點提供的程序,該程序將對整個 MIME 郵件 (MIME 標頭與內容內文部分) 運作。此外,不同於其他 CHARSET-CONVERSION 作業或轉換通道作業,service-command 會執行自己的 MIME 分解、解碼、重新編碼及重新組合。請注意,此旗標會導致在轉換通道處理期間忽略某個項目,而在字元集轉換處理期間執行 SERVICE-COMMAND 項目。使用 / 指定路徑,而非 \。範例:command="D:/tmp/mybat.bat"

資訊傳送參數 (用於將資訊傳送至站點提供的程式以及從站點提供的程式傳送資訊。)

DPARAMETER-SYMBOL-n

環境變數,其中將儲存 Content-disposition 參數值 (如果有);n = 0, 1, 2,...執行站點提供的程式之前,會依次從 Content-Disposition: 參數清單中擷取各個 DPARAMETER-SYMBOL-n (n=0 為第一個參數,n=2 為第二,以此類推),並放置到指定的環境變數中。

PARAMETER-SYMBOL-n

環境變數,其中將儲存 Content-Type 參數值 (如果有);n = 0, 1, 2...執行站點提供的程式之前,會依次從 Content-Type: 參數清單中擷取各個 PARAMETER-SYMBOL-n (n=0 為第一個參數,n=2 為第二,以此類推),並放置到相同名稱的環境變數中。使用 MIME 參數轉換成的變數名稱作為引數,必須符合 IN-PARAMETER-NAME-n 子句。

MESSAGE-HEADER-FILE

將郵件的原始標頭全部、部分寫入或全不寫入環境變數 MESSAGE_HEADERS 指定的檔案。如果設定為 1,直接含括內文部分的原始標頭會被寫入環境變數 MESSAGE_HEADERS 指定的檔案。如果設定為 2,郵件的原始標頭會作為一個整體 (最外層的郵件標頭) 寫入檔案。

ORIGINAL-HEADER-FILE

0 或 1。如果設定為 1,含括 MESSAGE/RFC822 的部分 (不只是內文部分) 的原始標頭會被寫入環境變數 ORIGINAL_HEADERS 指定的檔案。

OVERRIDE-HEADER-FILE

0 或 1。如果設定為 1,轉換通道會從環境變數 OUTPUT_HEADERS 中讀取 MIME 標頭行,以置換含括 MIME 的部分中的原始標頭行。

OVERRIDE-OPTION-FILE

如果 OVERRIDE-OPTION-FILE=1,轉換通道會從環境變數 OUTPUT_OPTIONS 中讀取選項。

PART-NUMBER

帶點整數:a. b. c...MIME 內文部分的文件號碼。


字元集轉換與郵件重新格式化

Messaging Server 中一個相當基本的對映表就是字元集轉換表。此表格的名稱是 CHARSET-CONVERSION。它用於指定應執行哪些類型的通道至通道字元集轉換以及郵件重新格式化。

在許多系統中,無需執行字元集轉換或郵件重新格式化,因此不需要此表。但在有些情況下,必須執行字元轉換。

CHARSET-CONVERSION 對映表還可用於改變郵件的格式。有多種工具可用於將大量非 MIME 格式轉換成 MIME。還可以變更 MIME 編碼與結構。如果要將郵件轉送到僅支援 MIME 或特定 MIME 子集的系統時,便需要使用這些選項。此外,在少數情況下,還可將 MIME 轉換成非 MIME 格式。

MTA 探測 CHARSET-CONVERSION 對映表的方式有兩種。第一種探測用於確定 MTA 是否應將郵件重新格式化,如果是,應使用哪些格式化選項。(如未指定重新格式化,MTA 便不會去檢查特定的字元集轉換。)第一種探測的輸入字串一般格式如下:

IN-CHAN=in-channel;OUT-CHAN=out-channel;CONVERT

其中,in-channel 是來源通道 (即傳來郵件的通道) 的名稱,而 out-channel 是目標通道 (即郵件發往的通道) 的名稱。如果存在相符項目,則結果字串應為以逗號分隔的關鍵字清單。表格 13-7 列出這些關鍵字。

表格 13-7 CHARSET-CONVERSION 對映表關鍵字

關鍵字

描述

Always

即使郵件在發往 out-channel 之前會先通過轉換通道,仍然要強制轉換。

Appledouble

將其他 MacMIME 格式轉換成 Appledouble 格式。

Applesingle

將其他 MacMIME 格式轉換成 Applesingle 格式。

BASE64

將 MIME 編碼切換成 BASE64。此關鍵字僅適用於已編碼的郵件部分。包含 Content-transfer-encoding: 7BIT 或 8bit 的郵件無需任何特殊的編碼,因而此 BASE64 選項對它們無效。

Binhex

將其他 MacMIME 格式或包含 Macintosh 類型與 Mac 建立者資訊的部分,轉換成 Binhex 格式。

Block

從 MacMIME 格式部分中只擷取資料分支。

Bottom

將任何 message/rfc822 內文部分 (轉寄資訊)「轉變」為郵件內容部分與標頭部分。

Delete

將任何 message/rfc822 內文部分 (轉寄資訊)「分化成」郵件內容部分與標頭部分,並刪除轉寄標頭。

Level

移除郵件中冗餘的多重級別。

Macbinary

將其他 MacMIME 格式或包含 Macintosh 類型與 Macintosh 建立者資訊的部分,轉換成 Macbinary 格式。

No

停用轉換。

QUOTED-PRINTABLE

將 MIME 編碼切換成 QUOTED-PRINTABLE。

Record,Text

文字/一般部分達到 80 個字元時換行。

Record,Text= n

文字/一般部分達到 n 個字元時換行。

RFC1154

將郵件轉換成 RFC 1154 格式。

Top

將任何 message/rfc822 內文部分 (轉寄資訊)「分化成」標頭部分與郵件內容部分。

UUENCODE

將 MIME 編碼切換成 X-UUENCODE。

Yes

啟用轉換。

字元集轉換

如果 MTA 探測並發現將要重新格式化的郵件,則會開始檢查郵件的各個部分。一旦發現任何文字部分,便使用其字元集參數產生第二種探測。僅當 MTA 檢查並發現可能需要進行轉換時,才會執行第二種探測。第二種探測中的輸入字串如下所示:

IN-CHAN=in-channel;OUT-CHAN=out-channel;IN-CHARSET=in-char-set

in-channelout-channel 均如前述,而 in-char-set 為與相關特定部分關聯的字元集之名稱。如果第二種探測未發現相符項目,則不執行任何字元集轉換 (即使根據第一種探測中的相符關鍵字可以執行郵件重新格式化 [例如,變更 MIME 結構],亦不執行轉換)。如果存在相符項目,則產生以下形式的字串:

OUT-CHARSET=out-char-set

其中 out-char-set 指定 in-char-set 應轉換成的字元集之名稱。請注意,這兩種字元集均必須在字元集定義表 charsets.txt 中定義,該表位於 MTA 表格目錄中。如果此檔案中對該字元集的定義不正確,則不會執行任何轉換。但這通常不是問題,因為此檔案會定義數百種字元集,如今使用的大多數字元集都會在此檔案中定義。請參閱 imsimta chbuild (UNIX 與 NT) 公用程式的描述,以取得有關 charsets.txt 檔案的進一步資訊。

如果符合所有的條件,MTA 將開始建立字元集對映並執行轉換。轉換後的郵件部分會使用其轉換成的字元集名稱重新標示。

郵件重新格式化

如上所述,CHARSET-CONVERSION 對映表還用於實現 MIME 與數種專用郵件格式附件之間的轉換。

以下各節會舉例說明可以透過 CHARSET-CONVERSION 對映表影響的其他一些類型的郵件重新格式化。

非 MIME 二進位附件轉換

如果為與處理郵件相關的任何通道啟用 CHARSET-CONVERSION 時,使用某種非標準 (非 MIME) 格式的郵件 (例如,使用特定專用格式的郵件或來自 Microsoft Mail [MSMAIL] SMTP 閘道的郵件) 會自動轉換成 MIME 格式。如果您擁有 tcp_local 通道,則通常是指來自 Microsoft Mail SMTP 閘道的郵件之送進的通道,而以下參數會對遞送給本地使用者的郵件啟用轉換:

CHARSET-CONVERSION

   IN-CHAN=tcp_local;OUT-CHAN=ims-ms;CONVERT Yes

或者,若要涵蓋所有的通道,只需指定 OUT-CHAN=* 而非 OUT-CHAN=ims-ms 即可。但是,這樣可能會造成郵件處理負荷增加,因為,進入 tcp_local 通道的所有郵件都會被詳細檢查,而不是只檢查那些連結至特定通道的郵件。

更重要的是,這種不加區分的轉換可能會使您的系統難以確定轉換郵件的位置,這些郵件不一定屬於您自己的站點,僅僅是通過您的系統,在這種情況下,您只需進行傳輸,不必進行任何改變 (除了改變郵件訊息封和相關傳輸資訊以外。)

若要將 MIME 轉換成 Microsoft Mail SMTP 閘道可以識別的格式,請在您的 MTA 配置中對 Microsoft Mail SMTP 閘道使用單獨的通道;例如 tcp_msmail,並在 mappings. 檔案中加入以下內容:

CHARSET-CONVERSION

   IN-CHAN=*;OUT-CHAN=tcp_msmail;CONVERT RFC1154

重新標示 MIME 標頭

某些使用者代理程式或閘道可以傳送包含 MIME 標頭的郵件,這些標頭中所帶的資訊可能比它們能帶的資訊少,但足以建構更精確 MIME 標頭。儘管最好的解決方案是正確配置這類使用者代理程式或閘道,但如果它們不屬於您控制,您可以要求 MTA 嘗試重新建構更有用的 MIME 標頭。

如果 CHARSET-CONVERSION 對映表的第一種探測產生 YesAlways 關鍵字,則 MTA 將檢查 conversions 檔案是否存在。如果轉換檔案存在,則 MTA 會從中尋找包含 RELABEL=1 的項目,如果找到此項目,MTA 將執行該項目中指定的任何 MIME 重新標示。

例如,CHARSET-CONVERSION 表與 MTA conversions 檔案項目 (如下所示) 的結合,會使郵件送達 tcp_local 通道並路由至 ims-ms 通道,而最初送達時包含 MIME 標示 application/octet-stream 但檔案名稱參數帶有副檔名 psmsw 的郵件,會被分別重新標示為 application/postscript 或 application/msword。(請注意,這種更精確的標示是原始使用者代理程式或閘道應自行執行的。)

CHARSET CONVERSION TABLE

CHARSET-CONVERSION

   IN-CHAN=tcp_local;OUT-CHAN=mr_local;CONVERT Yes


MTA CONVERSIONS FILE ENTRIES

out-chan=ims-ms; in-type=application; in-subtype=octet-stream;
  in-parameter-name-0=name; in-parameter-value-0=*.ps;
  out-type=application; out-subtype=postscript;
     parameter-copy-0=*; relabel=1

out-chan=ims-ms; in-type=application; in-subtype=octet-stream;
  in-parameter-name-0=name; in-parameter-value-0=*.msw;
  out-type=application; out-subtype=msword;
     parameter-copy-0=* relabel=1

MacMIME 格式轉換

Macintosh 檔案包含兩個部分,一是包含 Macintosh 特定資訊的資源分支,一是包含適用於其他平台的資料之資料分支。這使得 Macintosh 檔案的傳輸更為複雜,因為傳輸 Macintosh 檔案部分時通常需要使用四種不同的格式。其中 Applesingle、Binhex 以及 Macbinary 這三種格式都包含 Macintosh 資源分支與 Macintosh 資料分支的合併編碼。第四種格式 Appledouble 則是包含資源分支與資料分支兩個單獨部分的多重格式。因此 Appledouble 通常是最適用於非 Macintosh 平台的格式,因為在這種情況下,資源分支部分可以被忽略,而資料分支部分可供非 Macintosh 應用程式使用。但是,在特別針對 Macintosh 傳送時,可以使用其他格式。

MTA 可以在以上多種 Macintosh 格式之間進行轉換。CHARSET-CONVERSION 關鍵字 AppledoubleApplesingleBinhexMacbinary 會告知 MTA 將其他 MacMIME 結構化部分分別轉換成 multipart/appledouble、application/applefile、application/mac-binhex40 或 application/macbinary 等 MIME 結構。此外,BinhexMacbinary 關鍵字也會請求轉換成指定格式的非 MacMIME 格式部分,但其 MIME Content-type: 標頭中仍包含 X-MAC-TYPEX-MAC-CREATOR 參數。CHARSET-CONVERSION 關鍵字 Block 告知 MTA 從 MacMIME 格式部分中只擷取資料分支,捨棄資源分支 (由於如此會遺失資訊,因此通常最好使用 Appledouble)。

例如,在遞送到 ims-ms 通道時,以下 CHARSET-CONVERSION 表會告知 MTA 轉換成 Appledouble 格式。

CHARSET-CONVERSION

  IN-CHAN=*;OUT-CHAN=l;CONVERT Appledouble

轉換至 Appledouble 格式僅適用於已使用 MacMIME 格式之一的部分。

轉換至 Appledouble 或 Block 格式時,可以使用 MAC-TO-MIME-CONTENT-TYPES 對映表指示對 Appledouble 部分或 Block 部分的資料分支放置何種特定的 MIME 標籤,具體取決於原始 Macintosh 檔案中包含的是何種 Macintosh 建立者與 Macintosh 類型資訊。此表的探測形式為:格式|類型|建立者|檔案名稱,其中,格式是指 SINGLE、BINHEX 或 MACBINARY 三者之一;類型與建立者分別指十六進位形式的 Macintosh 類型與 Macintosh 建立者資訊;檔案名稱就是檔案名稱。

例如,傳送至 ims-ms 通道時若要轉換成 Appledouble,並且在這樣做時對轉換自 MACBINARY 或 BINHEX 部分的任何 MS Word 或 PostScript 文件使用特定 MIME 標籤時,則適當的表格可以是:

CHARSET-CONVERSION

  IN-CHAN=*;OUT-CHAN=ims-ms;CONVERT Appledouble

MAC-TO-MIME-CONTENT-TYPES

! PostScript
    MACBINARY|45505346|76677264|* APPLICATION/POSTSCRIPT$Y
    BINHEX|45505346|76677264|* APPLICATION/POSTSCRIPT$Y
! Microsoft Word
    MACBINARY|5744424E|4D535744|* APPLICATION/MSWORD$Y
    BINHEX|5744424E|4D535744|* APPLICATION/MSWORD$Y

請注意,對映項目的範本 (右側) 必須設定有 $Y 旗標,以執行指定標示。其他附件類型的範例項目位於 MTA 表格目錄內的 mac_mappings.sample 檔案中。

如果要將非 MacMIME 格式部分轉換成 Binhex 或 Macbinary 格式,則此類部分必須提供 X-MAC-TYPE 和 X-MAC-CREATOR MIME Content-type: 參數值。請注意,MIME 重新標示可用於將此類參數強制加入原本未包含它們的部分。

服務轉換

MTA 的轉換服務工具可用於透過站點提供的程序處理郵件,以便產生新的郵件形式。它既不同於以上論述的 CHARSET-CONVERSION 作業類型,又不同於 conversion 通道,這兩者均針對個別 MIME 郵件部分內容進行作業,而轉換服務是針對整個 MIME 郵件部分 (MIME 標頭與內容) 以及整個 MIME 郵件進行作業。此外,不同於其他 CHARSET-CONVERSION 作業或轉換通道作業,轉換服務會執行自己的 MIME 分解、解碼、重新編碼及重新組合。

如同其他 CHARSET-CONVERSION 作業,轉換服務可以透過 CHARSET-CONVERSION 對映表啟用。如果 CHARSET-CONVESION 對映表的第一種探測產生 YesAlways 關鍵字,則 MTA 將檢查 MTA conversions 檔案是否存在。如果 conversions 檔案存在,則 MTA 會從中尋找指定 SERVICE-COMMAND 的項目,如果找到此類項目,便會執行該項目。conversions 檔案項目的格式如下:

in-chan=channel-pattern;
  in-type=type-pattern; in-subtype=subtype-pattern;
  service-command=command

重點在於指令字串。這是執行服務轉換時應執行的指令 (例如,呼叫文件轉換程式)。該指令必須處理包含要服務之郵件文字的輸入檔案,並產生包含新郵件文字的輸出檔案。在 UNIX 中,指令如果成功,則顯示 0 並結束,否則顯示非零值。

環境變數用於轉送輸入檔案與輸出檔案的名稱,以及包含郵件訊息封收件者位址清單的檔案之名稱。這些環境變數的名稱如下:

可使用標準指令行替換,將這三種環境變數的值替換到指令行中,即在 UNIX 中,於變數名稱前放置 $ 字元。



上一個      目錄      索引      下一個     


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