1 votes

Déterminer si un e-mail contient un certain nombre d'un caractère spécifique

J'espère pouvoir écrire une règle SpamAssassin qui s'appliquera si un e-mail contient plus de n d'un caractère spécifique dans le corps du message. Ce caractère n'est pas nécessairement continu. Par exemple, s'il y a dix astérisques au total dans un message, la règle s'applique.

Je sais comment écrire une règle s'il y a dix astérisques continus, comme ceci :

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

Comment puis-je réécrire la règle pour qu'elle corresponde à dix astérisques au total, pas nécessairement à la suite les uns des autres ?

5voto

laurens Points 107

La règle ci-dessus est malformée et ne fonctionnera pas.

Règles de SpamAssassin sont expressions régulières Il suffit donc d'y échapper :

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

De plus, les parenthèses ne sont pas nécessaires. Elles forment un groupe de capture qui est stocké en mémoire, ce qui (en supposant que vous receviez beaucoup d'e-mails contenant des astérisques) pourrait peser lourd sur votre serveur.

(Vous pouvez également faire body TEN_ASTERISKS /\*{10}/ mais j'ai voulu faire un exemple plus simple. Les expressions régulières sont très puissantes).


Pour faire correspondre dix astérisques distincts, il faut 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.

Le maxhits=11 est une optimisation. Elle indique à SpamAssassin d'arrêter de compter ( tflags multiple est coûteux).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X