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

使用者層級篩選器除錯

如果使用者抱怨篩選器未按預期運行,可以執行多個步驟來為篩選器除錯。此處對此有所描述。

Procedure使用者層級篩選器除錯

步驟
  1. 若要使 fileinto 篩選正常運行,請在 imta.cnf 檔案中檢查 ims-ms 通道是否如下進行了標記:

    fileinto $u+$s@$d

  2. 從使用者的 LDAP 項目中獲得使用者層級的篩選器。

    使用者層級的篩選器儲存在其 MailSieveRuleSource 屬性下的 LDAP 項目中。若要使用 ldapsearch 指令擷取使用者層級篩選器,請記住它們是以 base64 編碼的,因此需要使用 -Bo 切換對輸出進行解碼。


    ./ldapsearch -D "cn=directory manager" -w password -b 
    "o=alcatraz.sesta.com,o=isp" -Bo uid=test

    如下說明的 imsimta test -rewrite 指令也將自動對它們進行解碼。

  3. 驗證 MTA 是否可以查看使用者篩選器。

    發出指令:

    # imsimta test -rewrite -filter -debug user@sesta.com

    這將輸出您在上一步中擷取的使用者之篩選器。如果您未看到篩選器,則需要查出 LDAP 項目沒有將其傳回的原因。如果 imsimta test -rewrite 輸出顯示篩選器,則您會瞭解到 MTA 正在查看的使用者篩選器。下一步是使用 imsimta test -expression 指令測試篩選器的解譯。

  4. 使用 imsimta test -exp 對使用者的篩選器進行除錯。以下資訊是必需的:

    1. mailSieveRuleSource 屬性中的使用者篩選程式語言敘述。請參閱以上步驟。

    2. 用於觸發篩選器的 rfc2822 郵件。

    3. 要求篩選器對郵件進行的操作之描述。

  5. 建立文字檔案 (例如:temp.filter),該檔案包含基於使用者 mailSieveRuleSource: values 的篩選程式語言敘述。範例:

    require "fileinto";
    if anyof(header :contains
    ["To","Cc","Bcc","Resent-to","Resent-cc", 
       "Resent-bcc"] "commsqa"){ 
       fileinto "QMSG";
    }

    期望結果:如果 commsqa 是此郵件的收件者,則將該郵件歸檔至名為 QMSG 的資料夾。

  6. 建立名為 test.msg 的文字檔,該檔案包含使用者提供的 rfc2822 郵件檔案內容。

    可以使用使用者郵件儲存區域中的 .msg 檔案,或建立名為 test_rfc2822.msg 的包含使用者提供的 rfc2822 郵件檔案內容的文字檔。

  7. 使用 imsimta test -exp 指令:


    # imsimta test -exp -mm -block -input=temp.filter -message=test_rfc2822.msg
    
  8. 檢查輸出。

    imsimta test -exp 指令的最後幾行將顯示篩選解譯的結果。如下所示:


    Sieve Result: [] 
    或者: 
    Sieve Result: [action]
    

    其中,action 是指將篩選器套用到此郵件之後執行的動作。

    如果符合篩選器的條件,您將看到某些作為結果顯示的動作。如果不符合,則篩選結果為空白,可能是篩選器出現邏輯錯誤或 .msg 檔案不包含符合的資訊。如果有任何其他錯誤,則是篩選程序檔檔案出現語法錯誤,您需要為其除錯。

    如需有關輸出的更多詳細資訊,請參閱imsimta test -exp 輸出

  9. 如果篩選器在語法上有效,並且結果是正確的,則下一步是檢查 tcp_local_slave.log 除錯記錄檔。

    您測試的郵件檔案可能與傳送的郵件檔案不完全相同。查看接收內容的唯一方法是檢查 tcp_local_slave.log 檔案。此記錄將明確顯示正在傳送至 MTA 的郵件,以及篩選器如何套用於該郵件。

    如需有關獲得 tcp_local_slave.log 除錯檔案的更多資訊,請參閱除錯關鍵字中的 slave_debug 關鍵字。

imsimta test -exp 輸出

完整的 imsimta test -exp 指令如下所示:

# imsimta test -exp -mm -block -input=temp.filter -message=rfc2822.msg

輸出範例如下:


範例 17–4 imsimta test -exp 輸出


# imsimta test -exp -mm -block -input tmp.filter -message=rfc2822.msg
Expression: if header :contains ["to"] ["pamw"]       (1)
Expression: {
Expression: redirect "usr3@sesta.com";
Expression: keep;
Expression: }
Expression:
Expression: Dump: header:2000114;0  3  1  :contains  1  "to"  1
"pamw"  if  8  ;
Dump: redirect:2000121;0  1  1  "usr3@sesta.com"  ;  keep:2000117;0 (2)
Dump: 0
Result: 0
Filter result: [ redirect "usr3@sesta.com" keep ]    (3)
            

1) The Expression: 輸出行顯示正在從 tmp.filter 文字檔中讀取並剖析的篩選器。這些篩選器對除錯程序檔不是特別有用。

2) Dump: 輸出行顯示電腦解譯篩選敘述的結果。您不會看到任何錯誤,並且輸出似乎與您的輸入匹配。例如,傾印顯示文字 redirectusr3@sesta.com,這與 redirect "usr3@sesta.com"; 篩選器檔案中的行類似

如果未顯示此匹配文字,則您應該加以注意,否則對除錯程序檔也不會特別有用。

3) 在輸出末尾,您將得到 Filter result: 敘述。與之前描述的一樣,有兩種可能的結果:

Sieve Result: [] 或:Sieve Result: [ action]

其中動作是指篩選程序檔採取的動作。請注意,有時結果應為空白。例如,對於捨棄篩選器,應測試其不是始終捨棄測試的每個 .msg 檔案。如果括號之間有某些動作,例如:

Filter result: [ fileinto "QMSG" keep]

這表示 rfc2822.msg 檔案中的文字符合篩選器條件。在此特定範例中,篩選器會將郵件歸檔至資料夾 QMSG,並在收件匣中保留其副本。在此情況下,結果動作為 fileintokeep

測試篩選器時,應測試各種 .msg 檔案以取得兩種結果。您應該永遠要測試與篩選器相符的郵件是否已被篩選出,而您不希望比對的郵件則未進行篩選。

請記住,如果是針對萬用字元匹配,則必須使用 :matches 測試而不是 :contains。例如,如果要 from=*@sesta.com 匹配,則必須使用 :matches,否則測試會因不滿足測試條件而失敗。

imsimta test -exp 語法

imsimta test -exp 對指定的 RFC2822 郵件進行篩選語言敘述測試,並將篩選結果傳送至標準輸出。

語法如下:

imsimta test -exp -mm -block -input=Sieve_language_scriptfile -message=rfc2822_message_file

其中

-block 將整個輸入視為單個篩選程序檔。預設為將每行視為一個單獨的程序檔並單獨進行評估。僅當到達檔案結尾時才評估篩選。

-input=Sieve_file 是一個包含篩選程序檔的檔案。依預設,從讀取測試程序檔行或程序檔區段。

-message=message_file 是包含要對其進行篩選程序檔測試的 RFC 2822 郵件之文字檔。其必須為 RFC 2822 郵件,而不能是佇列檔案 (非 zz*.00 檔案)。

啟動之後,此指令會讀取程序檔資訊在測試郵件的上下文中進行評估並寫出結果。結果顯示將採取的動作以及程序檔中最終描述的評估結果。

其他有用的限定符號如下:

-from=address 指定要在訊息封測試中使用的訊息封 from: 位址。預設為使用 RETURN_ADDRESS MTA 選項指定的值。

-output=file 將結果寫入 file。預設為將程序檔評估結果寫入 stdout。