Isso funcionou no procmail, mas parece que o procmail foi abandonado em setembro de 2001 . Eu tinha uma regra que detectaria quando utf-8 fosse usado no cabeçalho 'Para:' para escrever meu nome usando emoji ou caracteres não latinos. Quando tento o mesmo na implementação da peneira de Dovecot "Pigeonhole", fico frustrado porque parece descartar alguns dos dados.
ref. Regras de peneira em RFC5228
ref. Implementação do Pombo Pombo
O que eu tentei:
require ["fileinto"];
if header :contains ["to", "from"] "=?utf-8?B?" { fileinto "Junk"; }
elsif address :contains :all ["to", "from"] "=?utf-8?B?" { fileinto "Junk"; }
Com estes dados de exemplo:
From: "=?utf-8?B?TWluaSBXdQ==?=" <[email protected]>
To: "=?utf-8?B?Q1VTVA==?=" <[email protected]>
Subject: =?utf-8?B?UmU6TWljcm9jaGlwIFRleGFzIE9mZmVy?=
Date: Mon, 20 Mar 2023 16:12:50 +0900
Hello potential customer! Please stop whatever you're
doing and pay attention to me!
O que eu ganho:
sieve-test -Tlevel=matching -t - /tmp/badmail.sieve /tmp/badmail.txt
## Started executing script 'badmail'
2: header test
2: starting `:contains' match with `i;ascii-casemap' comparator:
2: extracting `to' headers from message
2: matching value `"CUST" <[email protected]>'
2: with key `=?utf-8?B?' => 0
2: extracting `from' headers from message
2: matching value `"Mini Wu" <[email protected]>'
2: with key `=?utf-8?B?' => 0
2: finishing match with result: not matched
2: jump if result is false
2: jumping to line 3
3: address test
3: starting `:contains' match with `i;ascii-casemap' comparator:
3: extracting `to' headers from message
3: parsing address header value `"=?utf-8?B?Q1VTVA==?=" <[email protected]>'
3: address value `[email protected]'
3: extracting `all' part from address <[email protected]>
3: matching value `[email protected]'
3: with key `=?utf-8?B?' => 0
3: extracting `from' headers from message
3: parsing address header value `"=?utf-8?B?TWluaSBXdQ==?=" <[email protected]>'
3: address value `[email protected]'
3: extracting `all' part from address <[email protected]>
3: matching value `[email protected]'
3: with key `=?utf-8?B?' => 0
3: finishing match with result: not matched
3: jump if result is false
3: jumping to line 3
## Finished executing script 'badmail'
Implicit keep: store message in folder: INBOX
Ele registra o "=?utf-8?B?..." na saída do rastreamento, então eu sei que ele sabe. Mas o teste de 'cabeçalho' e o teste de 'endereço' descartam esses dados antes de serem executados. Eu também tentei :comparator "i;octet"
em vez do padrão "i;ascii-casemap" com os mesmos resultados.
Como posso testar os cabeçalhos brutos em vez desses valores interpretados?