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

轉換通道

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

使用本章之前,必須先瞭解通道的概念 (請參閱通道)。如需有關使用 conversion 通道進行病毒掃描的補充資訊,請參閱 Messaging Server 文件網站 下方的最新版本的「Messaging Server Technical Notes」。

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


備註 –

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


本節包含以下小節:

MIME 簡介

轉換通道使 MIME (多重目的網際網路郵件延伸) 標頭行的使用更加廣泛。管理員需要具備郵件結構與 MIME 標頭欄位的有關知識。如需有關 MIME 的完整資訊,請參閱 RFCs 1806, 2045 through 2049, and 2183。方便起見,此處提供了一份簡短的 MIME 簡介。

郵件結構

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

MIME 標頭

MIME 規格為內文部分定義了一組標頭行。包含 MIME-VersionContent-typeContent-Transfer-EncodingContent-IDContent-disposition。conversion 通道最常使用 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 標頭格式舉例如下:

Content-type: type/subtype; parameter1=value; parameter2=value...

type 說明內文部分的內容類型。type 範例有 TextMultipartMessageApplicationImageAudioVideo

subtype 進一步說明內容類型。每個 Content-type 各自擁有一組 subtypes。例如:text/plainapplication/octet-streamimage/jpeg。MIME 郵件的內容子類型由 IANA (網際網路指定號碼授權中心) 指定並列出。清單位於 http://www.iana.org/assignments/media-types

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


Content-type: text/plain; charset=us-ascii
Content-type: application/msword; name=temp.doc

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 參數指定) 將郵件傳送至 conversion 通道。表格中的項目格式如下:

IN-CHAN=source-channel;OUT-CHAN=destination-channel;CONVERT Yes/No

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


備註 –

形式為 user@conversion.localhostnameuser@conversion 的位址將透過 conversion 通道路由,而不考量 CONVERSIONS 對映表。


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

CONVERSIONS

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

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

請注意,這是非常基本的表格,可能不滿足使用更多自訂配置的站點 (例如,使用多個外寄至網際網路 tcp_* 通道或多個自網際網路內送 tcp_* 通道的站點) 的要求。

控制轉換處理

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

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

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


範例 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,因為 conversion 通道預設為外寄內文部分的原始 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 是轉換通道環境參數 (請參閱使用轉換通道環境變數)。程式應儲存其轉換的內文部分。


備註 –

當常規轉換項目請求包含外層郵件標頭的檔案時,訊息封創建者和收件者資訊現在分別作為 x-envelope-from 和 x-envelope-to 欄位提供。


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


備註 –

conversions 檔案遭修改時,必須重新編譯配置 (請參閱編譯 MTA 配置)。


轉換通道資訊流

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

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

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

使用轉換通道環境變數

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

使用 parameter-symbol-* 參數或一組預先定義的 conversion 通道環境變數 (請參閱使用轉換通道輸出選項),即可在 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 指定 conversion 通道將會從 OUTPUT_OPTIONS 環境變數命名的檔案中讀取 conversion 通道選項。請參閱使用轉換通道輸出選項

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

表 13–3 轉換通道環境變數

環境變數 

說明 

ATTACHMENT_NUMBER

目前部分的附件編號。其格式與 ATTACHMENT-NUMBER 轉換匹配參數的格式相同。 

CONVERSION_TAG

目前使用中的轉換標記之清單。對應於TAG 轉換匹配參數。 

INPUT_CHANNEL

使郵件在轉換通道上形成佇列的通道。對應於 IN-CHANNEL 轉換匹配參數。 

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_CHANNEL

郵件輸出的通道。對應於 OUT-CHANNEL 轉換匹配參數。 

OUTPUT_FILE

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

OUTPUT_HEADERS

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

OUTPUT_OPTIONS

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

PART_NUMBER

目前部分的部分編號。其格式與 PART-NUMBER 轉換匹配參數的格式相同。 

PART_SIZE

正在處理的部分之大小以位元組為單位。 

郵件轉換標記

郵件轉換標記是與特定收件者或寄件者相關的特殊標記。投遞郵件時,標記對轉換通道程式可見,後者可利用此標記進行特殊處理。轉換標記儲存在 LDAP 目錄中。

可按如下方法使用郵件轉換標記:管理員可使用 harmonica 的郵件轉換標記值設置選取的使用者。這樣,管理員就擁有了一個 conversion 通道設置,它將在處理郵件時偵測標記是否存在以及 harmonica 的值。上述情況發生時,該程式會執行某一任意功能。

郵件轉換標記可根據使用者或網域進行設定。網域層級的收件者 LDAP 屬性為 MailDomainConversionTag (可使用 MTA 選項 LDAP_DOMAIN_ATTR_CONVERSION_TAG 進行修改)。使用者層級的收件者 LDAP 屬性為 MailConversionTag (可使用 MTA 選項 LDAP_CONVERSION_TAG 進行修改)。兩個屬性均可以有多個值,且每個值均指定一個不同的標記。與給定收件者相關的標記組是可累積的,即在網域層級設置的標記可與在使用者層級設置的標記進行合併。

基於寄件者的轉換標記可使用 MTA 選項 LDAP_SOURCE_CONVERSION_TAGLDAP_DOMAIN_ATTR_SOURCE_CONVERSION_TAG, 進行設定,這兩個選項分別為與這些來源位址相關的轉換標記指定使用者層級和網域層級的 LDAP 屬性。這些選項均沒有預設屬性。

使用轉換通道輸出選項

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

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

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


/usr/local/bin/viro_screen2k $INPUT_FILE   # run the virus screener

if [ $? -eq 1 ]; then
   echo "OUTPUT_DIAGNOSTIC=’Virus found and deleted.’" > $OUTPUT_OPTIONS
   echo "STATUS=178029946" >> $OUTPUT_OPTIONS
else
   cp $INPUT_FILE $OUTPUT_FILE # Message part is OK
fi

            

在此範例中,會將系統診斷訊息與狀態碼增加至由 $OUTPUT_OPTIONS 定義的檔案中。讀取完 $OUTPUT_OPTIONS 暫存檔後,會看到如下內容:


OUTPUT_DIAGNOSTIC="Virus found and deleted."
STATUS=178029946

其中,OUTPUT_DIAGNOSTIC='Virus found and deleted’ 一行告知 conversion 通道將 Virus found and deleted 文字增加至郵件中。

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

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

表 13–4 conversion 通道輸出選項

選項 

說明 

OUTPUT_TYPE

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

OUTPUT_SUBTYPE

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

OUTPUT_DESCRIPTION

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

OUTPUT_DIAGNOSTIC

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

OUTPUT_DISPOSITION

輸出郵件部分的 MIME content-disposition

OUTPUT_ENCODING

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

OUTPUT_MODE

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

STATUS

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

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

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

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

從轉換項目呼叫對映表

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

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

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

$Y 傳回參數值。如果找不到相符的項目或者傳回 $Y,則轉換檔案項目中的參數會被忽略或視為空白字串。缺少相符項目或 $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。這會告知 conversion 通道從 OUTPUT_OPTIONS 檔案中讀取輸出選項。

  2. 使用轉換程序檔確定需要對特定郵件內文部分執行何種動作。

  3. 在程序檔中,透過寫入 OUTPUT_OPTIONS 檔案中的 STATUS=directive_code 選項,指定該動作的特殊指令。

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

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

名稱 

六進位值 

十進位值 

PMDF__FORCEHOLD

0x0A9C86AA

178030250

PMDF__FORCERETURN

0x0A9C857A

178029946

PMDF__FORCEDELETE

0x0A9C8662

178030178

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

退回郵件

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

echo "STATUS=178029946" >> $OUTPUT_OPTIONS

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

echo OUTPUT_DIAGNOSTIC=text-string >> $OUTPUT_OPTIONS

其中文字字串如下:「The message sent from your machine contained a virus which has been removed. Be careful about executing email attachments.

有條件地刪除郵件部分

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

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

echo "STATUS=178030178" >> $OUTPUT_OPTIONS

保留郵件

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

echo "STATUS=178030250" >> $OUTPUT_OPTIONS

這會請求 conversion 通道將郵件做為 .HELD 檔案暫停在 conversion 通道佇列中。

轉換通道範例

以下範例中的 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’"

轉換參數如下所示:

表 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-streamContent-type: application/msword) ,從而讓使用者可以「連按兩下」來開啟某個部分,而無需將此部分先儲存為一個檔案,然後再透過某個程式開啟它。

SERVICE-COMMAND

SERVICE-COMMAND=command 會執行站點提供的程序,該程序將對整個 MIME 郵 件 (MIME 標頭與內容內文部分) 運作。此外,不同於其他 CHARSET-CONVERSION 作業或轉換通道作業,service-command 會執行自己的 MIME 分解、解碼、重新編碼及重新組合。請注意,此旗標會導致在 conversion 通道處理期間忽略某個項目;而在字元集轉換處理期間則執行 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,conversion 通道會從環境變數 OUTPUT_HEADERS 中讀取 MIME 標頭行,以置換含括 MIME 的部分中的原始標頭行。

OVERRIDE-OPTION-FILE

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

PART-NUMBER

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

自動偵測阿拉伯語字元集

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

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

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

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

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

Procedure自動偵測阿拉伯語字元集

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

    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

  2. msg_svr_base/config 目錄中建立轉換檔案,該檔案由目前版本的 Messaging Server 使用者擁有並讀取,包含以下內容:

    !
    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"
    !
    
  3. 使用以下指令編譯您的 MTA 配置:

    msg_svr_base/sbin/imsimta cnbuild

  4. 使用以下指令重新啟動:

    msg_svr_base/sbin/imsimta restart