Determine se um e-mail contém um certo número de um caractere específico

1

Espero escrever uma regra de SpamAssassin que corresponda se um email contiver mais de n de um caractere específico no corpo da mensagem. Não necessariamente contínuo. Por exemplo, se houver dez asteriscos totais em uma mensagem, combine a regra.

Eu sei escrever uma regra se houver dez asteriscos contínuos, assim:

body TEN_ASTERISKS /(**********)/
score TEN_ASTERISKS 0.5
describe TEN_ASTERISKS Message body contains ten asterisks.

Como eu reescreverei a regra para corresponder em dez asteriscos totais, não necessariamente em uma linha?

    
por dub stylee 07.07.2015 / 00:40

1 resposta

4

A regra acima está malformada e não funcionará.

Regras do SpamAssassin são regulares expressões , então você só precisa escapar:

body TEN_ASTERISKS /\*\*\*\*\*\*\*\*\*\*/
score TEN_ASTERISKS 0.5
describe TEN_ASTERISKS Message body contains ten asterisks.

Além disso, os parênteses são desnecessários. Eles formam um grupo de captura que é armazenado na memória, o que (supondo que você veja um monte de mensagens cheias de asteriscos) poderia ter um pedágio em seu servidor.

(Você também pode fazer body TEN_ASTERISKS /\*{10}/ , mas eu queria fazer um exemplo mais simples. Expressões regulares são muito poderosas.)

Para associar dez asteriscos separados, você precisa de tflags multiple :

body     __HAS_ASTERISK  /\*/
tflags   __HAS_ASTERISK  multiple maxhits=11
meta     TEN_ASTERISKS   __HAS_ASTERISK > 10
score    TEN_ASTERISKS   0.5
describe TEN_ASTERISKS   Message body contains ten asterisks.

A parte maxhits=11 é uma otimização. Ele diz ao SpamAssassin para parar a contagem ( tflags multiple é caro para ser executado).

    
por 07.07.2015 / 03:10