O SpamAssassin não permite escrever código ou atribuir variáveis ... em suas regras. Para fazer o que você quer, seria mais adequado escrever um plugin personalizado (que lhe daria acesso total ao perl).
Dito isso, você pode tecnicamente fazer o que está pedindo na sintaxe de escrita de regras do SpamAssassin usando o tipo de cabeçalho ALL
(que examina todos os cabeçalhos de uma só vez, como rawbody
):
header RPATH_EMBEDS_TO_ADDR ALL =~ /\bReturn-Path:[^\r\n]{0,99}-([\w.])=([\w.-]{1,99}\.[a-z]{2,8})\@(?:[^\r\n]{0,99}[\r\n]{1,9}){1,30}To:[^\r\n]{0,99}<@>/ism
A regra acima é cara , e seria ainda mais cara se você permitisse traços no nome de usuário, já que teria que iterar todos os tamanhos possíveis de ([\w.-])
para o nome de usuário. Isso é caro não apenas porque requer muito backtracking, mas também porque requer examinar strings muito longas. Além disso, é possível que o cabeçalho Return-Path
seja após o cabeçalho To
, o que significa que você precisaria de uma segunda regra para um segundo regex para lidar com esse caso.
Seria melhor escrever um plugin personalizado do SpamAssassin para essa técnica.
No entanto, acho que você descobrirá que tudo isso afeta determinados tipos de correspondência em massa, muitos dos quais são legítimos; o cabeçalho Return-Path
é usado como um endereço de devolução e muitas listas de e-mail codificam o destinatário para avaliar sua capacidade de entrega e limpar suas listas.
Se você realmente quer esse tipo de coisa, suspeito que não importa se o endereço To
exato é o presente no cabeçalho Return-Path
. Aqui está uma regra dramaticamente mais rápida que deve ter quase a mesma eficácia:
header RPATH_EMBEDS_ADDR Return-Path =~ /-[\w.]{1,99}=[\w.-]{1,99}\.[a-z]{2,8}\@/i
Outra observação importante é que sempre que uma mensagem é redirecionada (por exemplo, um serviço de encaminhamento de email), o cabeçalho Return-Path
é reescrito. Isso pode limitar o utilitário de detecção de spam dessa regra.