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

    此命令应该输出您在前面步骤中检索的用户 Sieve 过滤器。如果未看见过滤器,则需要指出为什么 LDAP 条目未返回这些过滤器。如果 imsimta test -rewrite 输出显示过滤器,则表明 MTA 可看到用户过滤器。下一步将使用 imsimta test -expression 命令测试过滤器的解释。

  4. 使用 imsimta test -exp 调试用户过滤器。需要以下信息:

    1. mailSieveRuleSource 属性中的用户 Sieve 语言语句。请参见以上步骤。

    2. 触发过滤器的 rfc2822 邮件。

    3. 描述过滤器应对邮件进行什么操作。

  5. 创建文本文件(例如:temp.filter),该文本文件包含基于用户 mailSieveRuleSource: values 的 Sieve 语言语句。示例:

    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 解释的结果。结果类似于:


    Sieve Result: [] 
    or this: 
    Sieve Result: [action]
    

    其中,action 是在此邮件上应用 Sieve 过滤器后要执行的操作。

    如果过滤器的条件匹配,则会得到显示为结果的某个操作。如果没有匹配项,Sieve 结果将为空白,原因是 Sieve 过滤器中存在逻辑错误或 .msg 文件不包含匹配信息。如果收到任何其他错误,则 Sieve 脚本文件中存在语法错误,您需要对其进行调试。

    有关输出的更多信息,请参见imsimta test -exp 输出

  9. 如果过滤器在语法上有效并且结果正确,则下一步将检查 tcp_local_slave.log 调试日志文件。

    可能会出现正在测试的邮件文件与正在发送的邮件文件不相同的情况。查看正在接收的内容的唯一方法是:检查 tcp_local_slave.log 文件。此日志将向您显示正在发送到 MTA 的实际邮件以及如何将过滤器应用到该邮件。

    有关获取 tcp_local_slave.log 调试文件的更多信息,请参见调试关键字中的 slave_debug 关键字。