Sun Java System Messaging Server 6 2005Q4 관리 설명서

사용자 수준 필터 디버그

사용자가 Sieve 필터가 제대로 작동하지 않는다고 불평할 경우 여러 단계를 수행하여 필터를 디버깅할 수 있습니다. 여기에서 이러한 단계에 대해 설명합니다.

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. 사용자의 mailSieveRuleSource: values를 기반으로 Sieve 언어 문을 포함하는 텍스트 파일(예: temp.filter)을 만듭니다. 예:

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

    예상 결과: commsqa가 이 메일의 수신자일 경우 메일을 QMSG라는 폴더에 정리합니다.

  6. 사용자가 제공한 rfc2822 메일 파일의 내용을 포함하는 test.msg라는 텍스트 파일을 만듭니다.

    사용자 메일 저장소 영역의 .msg 파일을 사용하거나 사용자가 제공한 rfc2822 메일 파일의 내용을 포함하는 test_rfc2822.msg라는 텍스트 파일을 만들 수 있습니다.

  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 키워드를 참조하십시오.

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) Expression: 출력 행은 tmp.filter 텍스트 파일에서 읽고 구문 분석될 필터를 표시합니다. 이러한 행은 스크립트를 디버깅하는 데 그다지 유용하지 않습니다.

2) Dump: 출력 행은 Sieve 문을 해석하는 컴퓨터의 결과입니다. 오류가 표시되지 않아야 하며 출력이 입력과 일치하는 것으로 보여야 합니다. 예를 들어, 이 덤프에서 필터 파일 redirect "usr3@sesta.com";의 행과 같은 단어 redirect, usr3@sesta.com을 표시해야 합니다.

일치하는 텍스트가 표시되지 않은 경우에는 신경을 써야 합니다. 그렇지 않은 경우에는 스크립트를 디버깅하는 데 그다지 유용하지 않습니다.

3) 출력의 맨 아래에 Filter result: 문이 나타납니다. 앞에서 언급한 것처럼 다음과 같은 두 가지 결과가 가능합니다.

Sieve Result: [] 또는Sieve Result: [ action]

여기서 action은 Sieve 스크립트가 수행하는 작업입니다. 경우에 따라서는 빈 결과를 예상할 수도 있습니다. 예를 들어, discard 필터의 경우에는 테스트하는 모든 .msg 파일을 항상 삭제하지 않는지 테스트해야 합니다. 예를 들어 대괄호 사이에 작업이 있는 경우

Filter result: [ fileinto "QMSG" keep]

rfc2822.msg 파일의 텍스트가 필터 기준과 일치했다는 것을 의미합니다. 이 특수한 예에서 필터는 메일을 QMSG 폴더에 파일로 저장하고 복사본을 받은 메일함에 보관합니다. 이 경우의 결과 작업은 fileintokeep입니다.

필터를 테스트할 때 두 결과 모두에 대해 여러 .msg 파일을 테스트해야 합니다. 필터와 일치하는 메일이 필터링되는지, 일치시키지 않으려는 메일이 필터링되지 않는지 항상 테스트해야 합니다.

와일드카드 일치의 경우에는 :contains가 아니라 :matches 테스트를 사용해야 한다는 것에 주의합니다. 예를 들어, from=*@sesta.com을 일치시키려면 :matches를 사용해야 합니다. 그렇지 않으면 테스트 조건을 전혀 만족하지 않으므로 테스트가 실패합니다.

imsimta test -exp 구문

imsimta test -exp는 지정된 RFC2822 메일에 대해 Sieve 언어 문을 테스트하고 필터 결과를 표준 출력으로 보냅니다.

구문은 다음과 같습니다.

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

여기서

-block은 전체 입력을 단일 Sieve 스크립트로 처리합니다. 기본값은 각 행을 별개의 스크립트로 처리하고 별개로 평가하는 것입니다. Sieve는 파일의 끝에 도달한 경우에만 평가됩니다.

-input=Sieve_file은 Sieve 스크립트를 포함하는 파일입니다. 기본값은 stdin에서 테스트 스크립트 행이나 스크립트 블록을 읽는 것입니다.

-message=message_file은 Sieve 스크립트를 테스트할 RFC 2822 메일을 포함하는 텍스트 파일입니다. 이 파일은 반드시 RFC 2822 메일이어야 하며 대기열 파일이 될 수 없습니다(zz*.00 파일이 아님).

이 명령은 활성화될 경우 스크립트 정보를 읽어 테스트 메일의 컨텍스트에서 평가한 다음 결과를 기록합니다. 결과에는 스크립트의 최종 문을 평가한 결과뿐만 아니라 수행되는 작업도 표시됩니다.

유용한 추가 한정자는 다음과 같습니다.

-from=address는 봉투 테스트에 사용할 봉투의 from: 주소를 지정합니다. 기본값은 RETURN_ADDRESS MTA 옵션에 지정된 값을 사용하는 것입니다.

-output=file은 결과를 file에 기록합니다. 기본값은 스크립트 평가 결과를 stdout에 기록하는 것입니다.