若要使 fileinto 篩選正常運行,請在 imta.cnf 檔案中檢查 ims-ms 通道是否如下進行了標記:
fileinto $u+$s@$d
從使用者的 LDAP 項目中獲得使用者層級的篩選器。
使用者層級的篩選器儲存在其 MailSieveRuleSource 屬性下的 LDAP 項目中。若要使用 ldapsearch 指令擷取使用者層級篩選器,請記住它們是以 base64 編碼的,因此需要使用 -Bo 切換對輸出進行解碼。
./ldapsearch -D "cn=directory manager" -w password -b "o=alcatraz.sesta.com,o=isp" -Bo uid=test |
驗證 MTA 是否可以查看使用者篩選器。
發出指令:
# imsimta test -rewrite -filter -debug user@sesta.com
這將輸出您在上一步中擷取的使用者之篩選器。如果您未看到篩選器,則需要查出 LDAP 項目沒有將其傳回的原因。如果 imsimta test -rewrite 輸出顯示篩選器,則您會瞭解到 MTA 正在查看的使用者篩選器。下一步是使用 imsimta test -expression 指令測試篩選器的解譯。
建立文字檔案 (例如:temp.filter),該檔案包含基於使用者 mailSieveRuleSource: values 的篩選程式語言敘述。範例:
require "fileinto"; if anyof(header :contains ["To","Cc","Bcc","Resent-to","Resent-cc", "Resent-bcc"] "commsqa"){ fileinto "QMSG"; }
期望結果:如果 commsqa 是此郵件的收件者,則將該郵件歸檔至名為 QMSG 的資料夾。
建立名為 test.msg 的文字檔,該檔案包含使用者提供的 rfc2822 郵件檔案內容。
可以使用使用者郵件儲存區域中的 .msg 檔案,或建立名為 test_rfc2822.msg 的包含使用者提供的 rfc2822 郵件檔案內容的文字檔。
使用 imsimta test -exp 指令:
# imsimta test -exp -mm -block -input=temp.filter -message=test_rfc2822.msg |
檢查輸出。
imsimta test -exp 指令的最後幾行將顯示篩選解譯的結果。如下所示:
Sieve Result: [] 或者: Sieve Result: [action] |
其中,action 是指將篩選器套用到此郵件之後執行的動作。
如果符合篩選器的條件,您將看到某些作為結果顯示的動作。如果不符合,則篩選結果為空白,可能是篩選器出現邏輯錯誤或 .msg 檔案不包含符合的資訊。如果有任何其他錯誤,則是篩選程序檔檔案出現語法錯誤,您需要為其除錯。
如需有關輸出的更多詳細資訊,請參閱imsimta test -exp 輸出。
如果篩選器在語法上有效,並且結果是正確的,則下一步是檢查 tcp_local_slave.log 除錯記錄檔。
您測試的郵件檔案可能與傳送的郵件檔案不完全相同。查看接收內容的唯一方法是檢查 tcp_local_slave.log 檔案。此記錄將明確顯示正在傳送至 MTA 的郵件,以及篩選器如何套用於該郵件。
如需有關獲得 tcp_local_slave.log 除錯檔案的更多資訊,請參閱除錯關鍵字中的 slave_debug 關鍵字。