fdm - ações aninhadas

3

Estou tentando classificar emails de entrada de um sistema de tickets em maildires contendo o número do ticket.

O remetente é: [email protected]

O assunto contém sempre: RequestID: <numbers>

Então eu tentei com o seguinte conjunto de regras:

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
}

O ticket de ação é assim:

action "ticket"        maildir  "%h/Mails/work/INBOX.Ticket-%[ticketno]"

Ele corresponde, mas a pasta recém-criada termina com o sinal de menos ( Mails/work/INBOX.Ticket- ) como se a tag não tivesse sido bem-sucedida.

Atualização:

Aqui estão os registros de 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

O ticket não foi escrito para o maildir.

Atualização 2:

Atualizado para a versão mais recente do fdm para garantir que todas as correções estejam incluídas

Como posso escrever a tag no nome maildir?

Atualização 3:

A linha de assunto é assim:

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?=
    
por Sascha 25.01.2017 / 14:19

1 resposta

2

Parece que fdm não faz decodificação MIME-Header, portanto, quando um cabeçalho de e-mail foi codificado, por exemplo, como =?iso-8859-1?Q?... , você terá que explicitamente levar isso em consideração em seu regexp. Observe que o fdm unirá cabeçalhos de várias linhas em uma linha durante a fase de regexp para ajudá-lo.

Assim, se você puder garantir que o remetente do e-mail sempre usará exatamente a mesma codificação de cabeçalho, você poderá substituir seu regexp por algo como

match "^Subject:.*RequestID:.*\?Q\?_([0-9]*)" action tag "ticketno" value "%1" continue

para que você pule o cabeçalho de codificação. No entanto, uma solução mais limpa seria introduzir algum código perl (ou similar) para decodificar o cabeçalho no uft8 e depois combinar com o seu regexp original. Crie um arquivo, digamos /tmp/decodesubject , com o seguinte conteúdo:

#!/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";

e torne-o executável com chmod +x /tmp/decodesubject . Talvez seja necessário instalar um pacote como perl-MIME-tools ou libmime-tools-perl para obter as funções Mail::Header . O script lê um e-mail em stdin e imprime apenas o cabeçalho Assunto decodificado. Para chamá-lo de seu arquivo de configuração, substitua a linha match acima por

match pipe "/tmp/decodesubject" returns (0,"Subject:.*RequestID:[ \t]*([0-9]*)")
action tag "ticketno" value "%[command1]" continue

Observe que, para obter os grupos de captura no comando regular de um comando pipe , parece que você não pode usar %1 , mas deve usar "%[command1]" .

    
por 26.01.2017 / 14:52

Tags