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

Sun ONE Messaging Server 6.0 管理員指南

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

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

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

本章包含以下小節:

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

表格 11-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 可以是字串或整數,具體取決於選項的需求。

表格 11-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 ONE Messaging Server Reference Guide」


轉換通道

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

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

實施轉換通道包括 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 檔案包含的項目用於控制將要處理的內文部分類型及其處理方式。

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

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

程式碼範例 11-1  conversion 檔案項目

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-* 參數,可進一步判定郵件部分。(請參見表格 11-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"

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

程式碼範例 11-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 ONE Messaging Server Reference Manual」中的 imsimta refresh 指令)。


轉換通道資訊流程

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

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

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

使用轉換通道環境變數

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

使用 parameter-symbol-* 參數或使用一組預先定義的轉換通道環境變數 (請參見表格 11-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 的部分之原始標頭寫入環境變數 INPUT_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" 指定要對郵件內文部分執行的指令。

表格 11-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

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

使用轉換通道輸出選項

轉換通道輸出選項 (表格 11-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 狀態。此狀態碼指示轉換通道將郵件退回給寄件者。(如需有關使用特殊指令的更多資訊,請參閱使用轉換通道輸出退回、刪除或保留郵件。)

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

表格 11-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 的部分的所有原始標頭行會被寫入 OUTPUT_HEADERS 環境變數所指定的檔案。如果 OVERRIDE-HEADER-FILE=1,則轉換通道會讀取含括部分的標頭並將其用作 OUTPUT_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 中。轉換通道常用的特殊指令如下:

表格 11-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’"

表格 11-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

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

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"

TAG

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

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

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 的部分 (不只是內文部分) 的原始標頭會被寫入環境變數 OUTPUT_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 是目標通道 (即郵件發往的通道) 的名稱。如果存在相符項目,則結果字串應為以逗號分隔的關鍵字清單。表格 11-7 列出這些關鍵字。

表格 11-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 中,於變數名稱前放置 $ 字元。


使用 Brightmail

Brightmail Inc. 是一家為電子郵件伺服器提供防垃圾郵件與防毒軟體解決方案的公司。Brightmail 解決方案包含 Brightmail 伺服器以及可下載至電子郵件伺服器的即時防垃圾郵件與防毒規則更新。請參閱轉換通道,以瞭解將防毒軟體整合至您的系統的其他方法。

Brightmail 的工作方式

Brightmail 伺服器佈署於客戶站點。Brightmail 具有電子郵件探測,設定為在整個網際網路偵測新垃圾郵件。Brightmail 技術人員會建立自訂規則,以即時封鎖該垃圾郵件。這些規則也會即時下載至 Brightmail 伺服器。Brightmail 資料庫更新後,Brightmail 伺服器會針對指定使用者或網域的電子郵件執行此資料庫過濾器。

Brightmail 的架構

圖 11-1 描繪了 Brightmail 的架構。

圖 11-1  

本圖顯示 Brightmail 和 Messaging Server 的架構。

Brightmail 與 Messaging Server 的架構

當 Brightmail Logistics and Operations Center (BLOC) 從電子郵件中探測到垃圾郵件時,操作員會立即建立適當的防垃圾郵件規則,這些規則可下載至 Brightmail 客戶機器上。同樣,Brightmail 還會傳送 Symantec 安全性回應即時病毒規則。客戶的 Brightmail 伺服器會使用這些規則攔截垃圾郵件及病毒。

MTA 使用 Brightmail SDK 與 Brightmail 伺服器進行通訊。MTA 會根據從 Brightmail 傳回的回應派送郵件。當 MTA 收到郵件 (1a) 或 (1b) 時,會將郵件傳送給 Brightmail 伺服器 (2)。Brightmail 伺服器會使用其規則和資料,確定郵件是否為垃圾郵件或病毒 (3),然後向 MTA 傳回判定結果。MTA 便根據該判定結果 (4a) 捨棄郵件或將郵件歸檔至資料夾,或者 (4b) 將郵件正常遞送到目的地。

由於 Brightmail SDK 是協力廠商軟體,我們未將其納入安裝套件中。必須從 Brightmail Inc. 獲取 Brightmail SDK 與伺服器軟體。MTA 的配置設定會告知您是否以及在何處載入 Brightmail SDK,以啟用 Brightmail 整合。

載入 SDK 後,Brightmail 郵件處理會由數個因素與詳細級別 (Brightmail 指定作用中的處理作業時使用的術語是選擇加入) 確定。依以下準則指定:

對於任何特定郵件收件者,上述選擇加入和預設是合併的,這意味著如果通道預設已指定用於垃圾郵件和病毒,則無需再考量針對使用者的選擇加入。即,如果系統管理員決定對每位使用者進行垃圾郵件及病毒過濾,則無需為使用者提供選擇加入以過濾垃圾郵件或病毒的功能。無法選擇退出處理,即使用者一旦選擇加入某種服務,便無法拒絕該服務。這還意味著如果您選擇加入某種服務,並且您的郵件已轉寄至另一位址,該位址將在該服務代您執行過濾作業後收到郵件。

在此只提供兩種服務,即病毒或垃圾郵件偵測。雖然 Brightmail 也提供「內容過濾」服務,但此功能必須配合篩選使用,因此,使用 Brightmail 執行篩選過濾沒有多少附加值。

當郵件被確定為包含病毒時,Brightmail 伺服器可配置為清除病毒,並將清除後的郵件重新提交回 MTA。(由於在重新提交的已清除郵件中有關原始郵件的資訊遺失會導致某些負面影響,我們建議您不要將 Brightmail 配置為將已清除郵件重新提交回 MTA。)如果郵件為垃圾郵件,從 Brightmail 傳回的判定結果以及 Brightmail 中的配置會讓 MTA 確定如何處理該郵件。基本處理方式有三種:捨棄郵件、歸檔至資料夾或正常遞送至 INBOX

Brightmail 伺服器可與 MTA 位於同一系統中,也可位於不同系統上。實際上,您可以針對一個或多個 MTA 系統配備多台 Brightmail 伺服器。Brightmail SDK 使用 Brightmail 配置檔案來確定使用哪台 Brightmail 伺服器。MTA 無需處理。

Brightmail 需求與效能注意事項

佈署 Brightmail

本節描述如何佈署 Brightmail 為具有以下配置:

使用關鍵字或 LDAP 屬性,在 Messaging Server 中啟用 Brightmail 過濾功能。系統上的這種過濾方式是附加的。即由關鍵字與屬性組合而成。

針對目標或來源通道上的所有使用者啟動 Brightmail 處理

  1. 安裝與配置 Brightmail 伺服器。
  2. 若要在系統上安裝 Brightmail,請洽詢 Brightmail 代表。

  3. 設定 Brightmail 程式庫與配置檔案參數,方法是將以下兩個 MTA 選項加入 options.dat 檔案:
  4. Brightmail_Library=path_and_filename_of_libbmiclient.so
    Brightmail_config_file=path_and_filename_of_brightmail_config_file

  5. 在 MTA 選項檔案 (表格 11-8) 和 Brightmail 配置檔案 (表格 11-10) 中指定所需的 Brightmail 選項。
  6. 指定 Brightmail 處理執行時所在的通道和電子郵件方向 (來源或目標)。
  7. 在通道區塊上設定關鍵字 sourcebrightmailoptindestinationbrightmailoptin (請參閱 MTA 配置檔案)。

    sourcebrightmailoptin 指定來自該通道的每封郵件都由 Brightmail 軟體進行處理。

    destinationbrightmailoptin 指定發往該通道的每封郵件都由 Brightmail 軟體進行處理。

    這些屬性的有效值如下:

    spam - 過濾垃圾郵件
    virus - 過濾病毒
    spam,virus - 過濾垃圾郵件和病毒

範例

範例 1 - 發往 tcp_siroemail 通道的郵件會由 Brightmail 進行垃圾郵件和病毒過濾:

範例 2,來自 tcp_local 通道的郵件會由 Brightmail 進行垃圾郵件過濾:

針對選取的使用者啟動 Brightmail 處理

  1. 安裝與配置 Brightmail 軟體。
  2. 若要在系統上安裝 Brightmail,請洽詢 Brightmail 代表。

  3. 設定 Brightmail 程式庫與配置檔案參數。
  4. options.dat 檔案中使用以下兩個 MTA 選項:

    Brightmail_Library=path_and_filename_of_libbmiclient.so
    Brightmail_config_file=path_and_filename_of_brightmail_config_file

  5. 在 MTA 選項檔案 (表格 11-8) 和 Brightmail 配置檔案 (表格 11-10) 中指定所需的 Brightmail 選項。
  6. 指定將用於針對指定使用者啟動 Brightmail 處理的 LDAP 屬性。
  7. option.dat 檔案中設定 LDAP_OPTIN=mailAntiUBEService。可以指定 mailAntiUBEService 以外的 LDAP 屬性,但建議使用此名稱。

  8. 在使用者項目中設定 LDAP 屬性 mailAntiUBEService,以得到 Brightmail 處理。
  9. mailAntiUBEService 的有效值為 spam (過濾垃圾郵件) 與 virus (過濾病毒)。

範例

假定 option.dat 檔案中的 LDAP_OPTIN 設定為 mailAntiUBEService。如果使用者 Otis Fanning 的使用者項目中的 mailAntiUBEService 屬性設定為 spamvirus,則該使用者的郵件會由 Brightmail 進行垃圾郵件和病毒過濾。程式碼範例 11-2 顯示 Otis Fanning 之已啟用 Brightmail 的使用者項目。

程式碼範例 11-2  Brightmail 的範例 LDAP 使用者項目

 

dn:uid=fanning,ou=people,o=sesta.com,o=ISP

objectClass:person

objectClass:organizationalPerson

objectClass:inetOrgPerson

objectClass:inetUser

objectClass:ipUser

objectClass:inetMailUser

objectClass:inetLocalMailRecipient

objectClass:nsManagedPerson

objectClass:userPresenceProfile

cn:Otis Fanning

sn:fanning

initials:OTF

givenName:Otis

pabURI:ldap://ldap.siroe.com:389/ou=fanning,ou=people,o=sesta.com,o=isp,o=pab

mail:Otis.Fanning@sesta.com

mailAlternateAddress:ofanning@sesta.com

mailDeliveryOption:mailbox

mailHost:manatee.siroe.com

uid:fanning

dataSource:iMS 5.0 @(#)ims50users.sh 1.5a 02/3/00

userPassword:password

inetUserStatus:active

mailUserStatus:active

mailQuota: -1

mailMsgQuota: 100

mailAntiUBEService:virus

mailAntiUBEService:spam

針對系統上選取的網域啟動 Brightmail 處理

  1. 安裝與配置 Brightmail 軟體。
  2. 若要在系統上安裝 Brightmail,請洽詢 Brightmail 代表。

  3. 設定 Brightmail 程式庫與配置檔案參數。
  4. options.dat 檔案中設定以下兩個 MTA 選項:

    Brightmail_Library=path_and_filename_of_libbmiclient.so
    Brightmail_config_file=path_and_filename_of_brightmail_config_file

  5. 在 MTA 選項檔案 (表格 11-8) 和 Brightmail 配置檔案 (表格 11-10) 中指定所需的 Brightmail 選項。
  6. 指定將用於針對指定網域啟動 Brightmail 處理的 LDAP 屬性。
  7. option.dat 檔案中設定 LDAP_DOMAIN_ATTR_OPTIN=mailAntiUBEService。可以指定不同的 LDAP 屬性名稱,但建議使用此名稱以保持 Messaging Server 綱目一致。

  8. 在網域項目 (位於 DC 樹中) 中設定 LDAP 屬性 mailAntiUBEService,使其電子郵件將得到 Brightmail 處理。
  9. mailAntiUBEService 的有效值為 spam (過濾垃圾郵件) 與 virus (過濾病毒)。

範例

假定 option.dat 檔案中的 LDAP_DOMAIN_ATTR_OPTIN 設定為 mailAntiUBEService。DC 樹中 example.com 網域項目中的 mailAntiUBEService 屬性設定為 spamvirus程式碼範例 11-3 顯示已啟用 Brightmail 的網域項目。

程式碼範例 11-3  Brightmail 的範例 LDAP 網域項目

dn:dc=sesta,dc=com,o=internet

objectClass:網域

objectClass:inetDomain

objectClass:mailDomain

objectClass:nsManagedDomain

objectClass:icsCalendarDomain

description: DC node for sesta.com hosted domain

dc:sesta

inetDomainBaseDN:o=sesta.com,o=isp

inetDomainStatus:active

mailDomainStatus:active

mailDomainAllowedServiceAccess:+imap, pop3, http:*

mailRoutingHosts:manatee.siroe.com

preferredMailHost:manatee.siroe.com

mailDomainDiskQuota: 100000000

mailDomainMsgQuota: -1

mailClientAttachmentQuota: 5

mailAntiUBEService:spam

mailAntiUBEService:virus

Brightmail 選項與關鍵字

表格 11-8表格 11-9 顯示 Messaging Server 的 Brightmail 選項與關鍵字。選取的 Brightmail 配置檔案選項如表格 11-10 所示。可從 Brightmail 獲取 Brightmail 配置檔案選項的最新完整清單。

表格 11-8  Brightmail MTA 選項 (option.dat)

選項

描述與預設

Brightmail_library

啟動 Brightmail 的必需選項。Brightmail SDK 共用程式庫的完整檔案路徑和名稱。與 Brightmail_config_file 一同指定時,此程式庫會由 MTA 於運行時間內載入。還可配合 SpamAssassin 使用。

範例:/opt/mailwall/lib/libbmiclient.so
預設:無

Brightmail_config_file

啟動 Brightmail 的必需選項。Brightmail 配置檔案的完整路徑和名稱。與 Brightmail_library 一同指定時,可為 Brightmail 整合啟用 MTA。還可配合 SpamAssassin 使用。

範例:/opt/mailwall/config
預設:無

LDAP_optin (在舊版中曾為 LDAP_SPARE_2)

LDAP 屬性的名稱,用於針對每位使用者啟動 Brightmail。它應為 inetMailUser 物件類別中的屬性。如果沒有其他預先定義的屬性,請使用 mailAntiUBEService

此屬性本身 (例如:mailAntiUBEService) 可以有多個值且區分大小寫。其值可以是小寫的 spamvirus。如果使用者選擇加入兩者,則會有兩個此類屬性,一個包含 spam,另一個包含 virus。

預設:無

LDAP_domain_attr_optin

LDAP 屬性的名稱,用於針對每個網域啟動 Brightmail。適用於目標網域。除了屬於物件類別 mailDomain 以外,其餘與上述 LDAP_optin 相同。

預設:無

Brightmail_verdict_n

Brightmail_verdict_nBrightmail_action_n 配對,其中 n 是 0 到 9 的數字。如果您使用 Brightmail 判定結果的預設解譯,則通常不指定這兩個選項。該選項的可能值由 Brightmail 配置檔案選項 blSWClientDestinationLocal (用於本地網域) 或 blSWClientDesintationForeign (用於非本地網域) 中 | 右側的值來指定。範例如下:

blSWClientDestinationLocal=spam|spamfolder

您可以設定 Brightmail_verdict_0=spamfolder (而不是 | 左側的 spam)。這種方法似乎不太直觀,但其工作方式確實如此。

預設:無

Brightmail_null_action

透過可選的 if-then-else 敘述* 指定來自 Brightmail 的判定結果符合 Brightmail 配置檔案中的空動作時要執行的篩選指令。例如,如果 Brightmail 配置檔案具有:

blSWClientDestinationLocal:spam|

其中 | 之後為空或沒有任何內容就表示空動作。如果郵件的判定結果為 spam,符合 | 之前的單詞 spam,則 MTA 將執行空動作。此選項通常無需指定,因為預設動作是 discard,在 Brightmail 中符合時表示空動作。

篩選指令的範本為:
data:,[require "command ";] command;
其中 require 敘述為 rejectfileinto 所必需的。

預設:data:,discard;

Brightmail_action_n

此選項與 Brightmail_verdict_n 選項配對,可透過可選的 if-then-else 敘述* 指定篩選指令以供執行。例如,如果要拒絕垃圾郵件,可以設定以下選項對:

  Brightmail_verdict_0=spamfolder
  Brightmail_action_0=data:,require "reject"; reject "Rejected by Brightmail";

篩選指令的範本為:
data:,[require "command ";] command;
其中 require 敘述為 rejectfileinto 所必需的。再舉一例:

  Brightmail_verdict_1=spam-folder
  Brightmail_action_1_=data;,require "fileinto";fileinto "Junk";

如此會將垃圾郵件 (假定 spam-folder 為 Brightmail 針對垃圾郵件傳回的判定結果) 歸檔至名為 Junk 的資料夾。如果沒有 Junk,垃圾郵件將被歸檔至名為 spam-folder 的資料夾。

預設:無

Brightmail_optional

如果設定為 1,則當 MTA 呼叫初始化常式以載入 Brightmail SDK 但卻失敗時,MTA 會繼續,如同未啟用 Brightmail 時一樣。如果 MTA 已與 Brightmail 通訊但 Brightmail 無回應,則此設定無效。在這種情況下,MTA 會將暫時性錯誤傳回 SMTP 用戶端。

預設: 0

Brightmail_string_action

透過可選的 if-then-else 敘述* 指定當 Brightmail 的判定結果符合某個動作 (Brightmail 配置檔案中的字串) 時要執行的篩選指令。例如,如果 Brightmail 配置檔案具有

blSWClientDestinationLocal:spam|spam-folder

spam-folder 為字串。如果判定結果為 spam,則得到符合該判定結果的字串。此選項極少使用,因為指定字串時,預設動作會將郵件歸檔至資料夾。

篩選指令的範本為:
data:,[require "command "] command;
其中 require 敘述為 rejectfileinto 所必需的。

預設:data:,require "fileinto"; fileinto "$U”;

$U 是指 blSWClientDestinationLocal 的值中 | 右側的字串 (在上例中可以為 spam-folder)。

* 以下為 option.dat 中可選 if-then-else 敘述的篩選範例。請注意,此敘述可用於 Brightmail_action_n, Brightmail_null_actionBrightmail_string_action。

Brightmail_string_action=data:,require "fileinto";\
if header :contains ["resent-from"] ["User-1"] {\
fileinto "testspam";\
} else {\
fileinto "spam";};

表格 11-9  Brightmail 的 MTA 通道關鍵字

通道關鍵字

描述

sourcebrightmail

指定源自此通道的所有郵件都得到 Brightmail 處理。如果收件者或收件者的網域已透過 LDAP 屬性選擇加入,則不論目標通道為何,Brightmail 都將知曉所有的收件者位址。請查看收件者的 LDAP 屬性 mailAntiUBEService (或等效屬性),確定是過濾垃圾郵件、病毒、兩者,還是都不過濾。如果 mailAntiUBEService 未指定 spam 或 virus,則郵件不會傳送至 Brightmail 伺服器進行過濾。應將其置於切換至的通道上 (如果 switchchannel 生效)。

語法
sourcebrightmail

destinationbrightmail

指定如果收件者透過 LDAP 屬性 mailAntiUBEService (或等效屬性) 選擇加入,則所有目標為此通道的郵件都得到 Brightmail 處理。

語法
destinationbrightmail

destinationbrightmailoptin

指定即使使用者或網域未透過 LDAP 屬性選擇加入那些服務,目標為此通道的所有郵件仍會得到指定的 Brightmail 處理 (垃圾郵件或病毒或兩者)。此關鍵字後接過濾器清單。後接清單必須為 spamvirusspam,virusvirus,spam

範例 1:
ims-ms destinationbrightmailoptin spam,virus. . .

所有目標為郵件儲存的郵件均由 Brightmail 進行垃圾郵件與病毒掃描。

sourcebrightmailoptin

指定即使使用者或網域未透過 LDAP 屬性選擇加入那些服務,源自此通道的所有郵件仍會得到指定的 Brightmail 處理 (垃圾郵件或病毒或兩者)。此關鍵字後接全系統的預設過濾器清單。後接清單必須為 spamvirusspam,virusvirus,spam。應將其置於切換至的通道上 (如果 switchchannel 生效)。

範例 1:
tcp_local sourcebrightmailoptin spam,virus . . .

指定不論使用者的 LDAP 屬性為何,郵件一律由 Brightmail 進行垃圾郵件和病毒掃描。

範例 2:
tcp_local sourcebrightmailoptin virus . . .

指定郵件預設為僅進行病毒掃描。在這種情況下,可以針對每位使用者啟用垃圾郵件過濾,或經由 LDAP 屬性依目標網域啟用垃圾郵件過濾。

表格 11-10  選取的 Brightmail 配置檔案選項

Brightmail 選項 (不區分大小寫)

描述 (屬性的值區分大小寫)

blSWPrecedence

給定郵件可具有多種判定結果。此選項指定優先順序。因此,如果郵件先要處理病毒,然後再處理垃圾郵件 (如果您指定此選項為 virus-spam),各判定結果之間會以連字符號 (-) 分隔。將 Brightmail 與 Sun ONE Messaging Server 配合使用時,建議使用該選項。

blSWClientDestinationDefault

指定如何遞送一般郵件,即非垃圾郵件或病毒,因此這類郵件沒有判定結果。通常您會希望正常遞送此郵件,因此可以將值指定為 inbox。此選項沒有預設。

blSWLocalDomain

此屬性指定將哪些網域視為本地。此屬性可包含多行,以指定數個網域,所有這些網域都應視為本地。本地與外部網域用於指定同一判定結果的兩種不同處理方式。

請參閱以下 blSWClientDestinationLocalblSWClientDestinationForeign。例如,您可以指定

blSWLocalDomain=siroe.com

blSWClientDestinationLocal

此選項指定本地網域的判定結果和動作對。此項目通常會有兩行,一行針對垃圾郵件,另一行則針對病毒。該值的形式為 verdict|action,例如,

blSWClientDestinationLocal=spam|spambox

blSWClientDestinationLocal=virus|

「空」動作 (表示 | 右側沒有內容) 的預設 Brightmail 解譯為捨棄郵件。因此在上述範例中,如果判定結果為 virus,則捨棄郵件。如果判定結果為 spam,上述範例會將郵件歸檔至名為 spambox 的資料夾。如果郵件既非垃圾郵件亦非病毒,則判定結果不符,該郵件會根據上述 blSWClientDestinationDefault 設定中的設定內容正常遞送。

使用與 MTA 分開的 Brightmail 伺服器時,可以自訂每個 MTA 執行的動作,方法是使用 Brightmail_verdict_n/Brightmail_action_n/Brightmail_null_action/Brightmail_string_action MTA 選項來置換 Brightmail 伺服器傳回的動作與判定結果。在此範例中,您可以使用 MTA 上不同的 Brightmail_null_action 來置換 Virus 動作 (捨棄郵件),或使用 Brightmail_verdict_0=spamboxBrightmail_action_0=data:,require "fileinto";fileinto "Junk"; 將郵件歸檔至名為 Junk 的資料夾而非 spambox

blSWClientDesintationForeign

格式與解譯與上述 blSWClientDestinationLocal 相同,除了它適用於非本地網域的使用者以外。

blSWUseClientOptin

與 Sun ONE Messaging Server 配合使用時,始終將本選項設定為 TRUE。

blswcServerAddress

格式為 ip:port[,ip:port,...],用於指定一個或多個 Brightmail 伺服器的 IP 位址和連接埠號。

常用 Brightmail 佈署方案

本節論述數種常用 Brightmail 佈署方案。包括:

針對本地進來的郵件進行 Brightmail 處理

您可能希望配置系統,以便針對所有在本地遞送的郵件進行垃圾郵件與病毒過濾。若要針對進入本地郵件儲存的所有郵件 (即進入 imta.cnf 中的 ims-ms 通道的所有郵件) 設定 Brightmail 處理,請在 ims-ms 通道定義中新增 destinationbrightmailoptin 關鍵字。範例:

ims-ms defragment subdirs 20 backoff “pt5m” “pt10” “pt30” “pt1h” \
“pt2h” “pt4h” maxjobs 1 pool IMS_POOL fileinto $U+$S@$D filter \
ssrd:$A ims-ms-daemon
destinationbrightmailoptin spam,virus
ims-ms-daemon

針對自網際網路進來的郵件進行 Brightmail 處理

您可能希望配置系統,以便針對所有來自網際網路的郵件進行垃圾郵件過濾。若要針對所有自網際網路進來的郵件設定 Brightmail 處理,請在 tcp-local 通道定義中新增 sourcebrightmailoptin 關鍵字。範例:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth
sourcebrightmailoptin spam
tcp-daemon


Brightmail 允許您捨棄垃圾郵件或將其儲存至指定垃圾郵件資料夾。如果指定垃圾郵件資料夾的功能不適用於接收系統,則垃圾郵件資料夾的位址語法對於該系統毫無意義。


針對外送至網際網路的郵件進行 Brightmail 處理

您可能希望配置系統,以便針對所有發往網際網路的郵件進行垃圾郵件過濾。若要針對所有外送至網際網路的郵件設定 Brightmail 處理,請在外送 MTA 上的 tcp-local 通道定義中新增 destinationbrightmailoptin 關鍵字。範例:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth \
destinationbrightmailoptin spam
tcp-daemon

針對進入特定後端郵件儲存主機的郵件進行 Brightmail 處理

若要配置系統,以便針對所有進入特定後端郵件儲存主機的郵件進行病毒與垃圾郵件過濾,請執行以下步驟:

  1. 在所有內送 SMTP 伺服器 (負責將郵件傳送至後端郵件儲存主機) 的 imta.cnf 檔案中,新增一個重寫規則。範例:
  2. msg_store1.siroe.com   $U@msg_store1.siroe.com

  3. 透過 destinationbrightmailoptin 關鍵字新增對應於該重寫規則的通道。範例:
  4. tcp_msg_store1 subdirs 20 backoff “pt5m” “pt10” “pt30” “pt1h” \
    “pt2h” “pt4h” maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
    destinationbrightmailoptin spam,virus
    msg_store1.siroe.com

新增標頭至垃圾郵件

您可以在垃圾郵件中新增任意標頭。若要在 Brightmail 軟體攔截的郵件中新增標頭 spam-result:,以表示該郵件為垃圾郵件,請在 option.dat 中加入以下內容:

brightmail_string_action=data:,require ["addheader" "spamtest"];addheader "spam-result:Brightmail says this is spam";

僅可以自訂 "spamtest"]; 後的文字。


使用 SpamAssassin

Messaging Server 支援使用 SpamAssassin,SpamAssassin 是一種用於識別垃圾郵件的免費郵件過濾器。SpamAssassin 包括一個以 Perl 撰寫的程式庫和一組可用於將 SpamAssassin 整合到郵件傳送系統中的應用程式與公用程式。

SpamAssassin 會計算每封郵件的分值。分值是透過針對郵件標頭及內文資訊執行一系列測試來計算的。每項測試成功或失敗,都會使分值相應地調整。分值是實數,可以是正數或負數。分值超過特定臨界值 (通常為 5.0) 的郵件會被視為垃圾郵件。

SpamAssassin 高度可調整。測試可以隨時新增或移除,而且現有測試的分值可以調整。透過各種配置檔案即可達此目的。如需有關 SpamAssassin 的進一步資訊,請查閱 SpamAssassin 網站。

用於呼叫 Brightmail 垃圾郵件與病毒掃描程式庫的機制,可用於連線至 SpamAssassin spamd 伺服器。Sun ONE Messaging Server 中提供的模組稱為 libspamass.so

SpamAssassin 需求與效能注意事項

佈署 SpamAssassin

本節會逐步說明如何在 Messaging Server 上佈署 SpamAssassin。

  1. 安裝和配置 SpamAssassin。
  2. SpamAssassin 站點提供在各種不同的系統上安裝和配置 SpamAssassin 時所需的一切資訊。

  3. 將 Brightmail 程式庫與配置檔案參數設定為 SpamAssassin。
  4. options.dat 檔案中設定以下兩個 MTA 選項:

    Brightmail_Library=path_and_filename_of_libspamass.so
    Brightmail_config_file=path_and_filename_of_SpamAssassin_config_file

  5. 建立 SpamAssassin 選項檔案。
  6. 在 MTA option.dat 檔案的 Brightmail_config_file 選項中指定此檔案。SpamAssassin 選項檔案包括多個 option=value 形式的行。選項在表格 11-11 中描述。

  7. 依需要配置 SpamAssassin。
  8. 此介面的預設運作方式 (由預設 mode=0 表示) 是捨棄被識別為垃圾郵件的郵件。完成此作業無需設定任何額外選項。

    您可透過 SpamAssassin 選項與 Brightmail MTA 選項的設定組合來獲得其他運作方式。例如,為了拒絕所有被識別為垃圾郵件的郵件,只需將 BRIGHTMAIL_NULL_ACTION MTA 選項設定為以下形式:

    data:,require "reject"; reject "Suspected spam message rejected";

    同樣,可以將垃圾郵件歸檔至 SPAM 資料夾,方法是將 BRIGHTMAIL_NULL_ACTION 設定為:

    data:,require "fileinto"; fileinto "SPAM";

    還可以有更多組合。例如,可以將垃圾郵件結果納入拒絕郵件中,方法是將 MTA 中的 BRIGHTMAIL_STRING_ACTION 選項設定為以下形式:

    data:,require "reject"; reject "Message rejected [$U]";

    並在 SpamAssassin 選項檔案中設定 MODE=1

  9. 啟動 spamd 常駐程式。通常以指令啟動,指令的一般形式為:

表格 11-12  適用於 SpamAssassin 的 MTA 選項

適用於 SpamAssassin 的 MTA 選項

描述

預設

Brightmail_library

SpamAssassin 共用程式庫的完整檔案路徑和名稱。

Brightmail_config_file

SpamAssassin 配置檔案的完整檔案路徑和名稱。

Brightmail_null_action

一種篩選規則,用於指定當 SpamAssassin 判定結果傳回空值時如何處理郵件。

data:,discard;

Brightmail_string_action

一種篩選規則,用於指定當判定結果為字串時如何處理郵件。

預設:data:,require "fileinto"; fileinto "$U;

$U 表示傳回的字串 verdict

請參閱描述



上一個      目錄      索引      下一個     


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