티켓팅 시스템에서 들어오는 메일을 티켓 번호가 포함된 메일 디렉터리로 분류하려고 합니다.
보낸 사람은 다음과 같습니다.[email protected]
주제에는 항상 다음이 포함됩니다.RequestID: <numbers>
그래서 다음 규칙 세트를 사용해 보았습니다.
match "^From:.*ticketsys@test\.de" in headers {
match "^Subject:.*RequestID:[ \t]*([0-9]*)" action tag "ticketno" value "%1" continue
match matched action "ticket"
match unmatched action keep
}
작업 티켓은 다음과 같습니다.
action "ticket" maildir "%h/Mails/work/INBOX.Ticket-%[ticketno]"
일치하지만 새로 생성된 폴더는 Mails/work/INBOX.Ticket-
마킹에 실패한 것처럼 빼기 기호( )로 끝납니다.
고쳐 쓰다:
다음의 로그는 다음과 같습니다 fdm -kvvvv fetch
.
WORK: trying (match) message 26
WORK: matching from 0 to 1586 (size=3876, body=1586)
WORK: tried regexp "^From:.*ticketsys@test\.de" in headers, result now 1
WORK: finished rule 17, result 1
WORK: matched to rule 17
WORK: entering nested rules
WORK: trying (match) message 26
WORK: matching from 0 to 3876 (size=3876, body=1586)
WORK: tried regexp "^Subject:.*RequestID:[ ]*([0-9]*)" in any, result now 1
WORK: finished rule 18, result 1
WORK: matched to rule 18
WORK: action <rule 18>:0 (tag), user andres
WORK: match message 26, deliver
WORK: trying (deliver) message 26
WORK: message 26, running action <rule 18>:0 (tag) as user andres
WORK: tagging message: ticketno ()
WORK: message 26 delivered (rule 18, tag) in 0.000 seconds
WORK: trying (deliver) message 26
WORK: deliver message 26, blocked
WORK: calling fetch state (0x416b00, flags 0x00)
WORK: 5 file descriptors in use
WORK: deliver started, pid 10023
WORK: deliver user is: andres (1001/1001), home is: /home/andres
WORK: saving to maildir /home/andres/Mails/work/INBOX.Ticket-
WORK: creating /home/andres/Mails/work
WORK: trying /home/andres/Mails/work/INBOX.Ticket-/tmp/1485412884.10023_0.HGL-049
WORK: writing to /home/andres/Mails/work/INBOX.Ticket-/tmp/1485412884.10023_0.HGL-049
WORK: moving .../tmp/1485412884.10023_0.HGL-049 to .../new/1485412884.10023_0.HGL-049
WORK: reading mail from: /home/andres/Mails/work/INBOX/cur/1485348562_1.29104.HGL-049,U=443306,FMD5=7e33429f656f1e6e9d79b29c3f82c57e:2,S
티켓 번호는 메일 디렉토리에 기록되지 않습니다.
업데이트 2:
모든 수정 사항이 포함되도록 최신 fdm 버전으로 업데이트하세요.
메일 디렉토리 이름에 라벨을 쓰는 방법은 무엇입니까?
업데이트 3:
제목 줄은 다음과 같습니다.
Subject: =?iso-8859-1?Q?Empfangsbest=E4tigung_f=FCr_Service?=
=?iso-8859-1?Q?_Request_mit_der_Service_RequestID:?=
=?iso-8859-1?Q?_1710000261_/__Domain:.test.de?=
=?iso-8859-1?Q?_Subdmonains_f=FCr_Staging_Zwecke?=
답변1
MIME 헤더 디코딩이 발생하지 않는 것 같으 fdm
므로 메시지 헤더가 인코딩될 때(예 =?iso-8859-1?Q?...
: 정규 표현식에서 명시적으로 이를 고려해야 합니다.) fdm은 정규식 단계에서 여러 줄의 헤더를 한 줄로 연결하여 도움을 줍니다.
따라서 메시지 발신자가 항상 동일한 헤더 인코딩을 사용하도록 보장할 수 있다면 정규식을 다음과 같은 것으로 바꿀 수 있습니다.
match "^Subject:.*RequestID:.*\?Q\?_([0-9]*)" action tag "ticketno" value "%1" continue
이렇게 하면 인코딩 헤더를 건너뛸 수 있습니다. 그러나 더 깔끔한 해결책은 일부 Perl 코드(또는 이와 유사한 코드)를 도입하여 헤더를 uft8로 디코딩한 다음 이를 원래 정규식과 일치시키는 것입니다. /tmp/decodesubject
예를 들어 다음 내용으로 파일을 만듭니다 .
#!/usr/bin/perl
use open qw/:std :encoding(utf-8)/;
use Mail::Header; # perl-MailTools
use Encode;
my $head = new Mail::Header \*STDIN, FoldLength=>999;
my $subject = $head->get('Subject');
$subject = Encode::decode('MIME-Header', $subject); # -> utf8
print "Subject: $subject";
실행 가능하게 만드세요 chmod +x /tmp/decodesubject
. 이러한 기능을 얻으려면 perl-MIME-tools
또는 같은 패키지를 설치해야 할 수도 있습니다 . 이 스크립트는 표준 입력으로 메일을 읽고 디코딩된 제목 헤더만 인쇄합니다. 구성 파일에서 호출하려면 위 줄을 다음으로 바꾸십시오.libmime-tools-perl
Mail::Header
match
match pipe "/tmp/decodesubject" returns (0,"Subject:.*RequestID:[ \t]*([0-9]*)")
action tag "ticketno" value "%[command1]" continue
명령에 대한 정규식에서 캡처 그룹을 얻으려면 pipe
사용할 수 없는 것 같지만 %1
를 사용해야 합니다 "%[command1]"
.