A correção superficial de sua tentativa seria
:0
* B ?? [][!@#$%^&*(){}]+
* ! B ?? </[a-zA-Z]+/>
$DEFAULT/MalSpam/
se eu estiver achando que você está tentando corresponder uma sequência de dois ou mais caracteres de pontuação e uma seqüência de caracteres que são alfabéticos entre </ e /> como uma condição negada (ou seja, uma correspondência se presente impede a receita de combinar).
No entanto, quaisquer dois caracteres de pontuação (como apenas !! ) corresponderão ao primeiro regex; e não vejo por que você articula a segunda condição como você fez.
Um desafio é que muitos caracteres de pontuação são metacaracteres de expressão regular. Para corresponder a um literal [ ou ( ou * , você precisa fazer escape de barra invertida ou colocá-los em uma classe de caracteres. (Uma classe de caractere contendo [ é [[] , o que leva um tempo para quebrar a cabeça. Isso é um literal [ dentro dos colchetes de classe de caractere [ ... ] . E uma classe de caractere contendo ] e [ precisam tê-los nessa ordem, então [][] .) Eu fiz o primeiro regex simples colocando tudo em uma classe de caractere, mas como é, provavelmente é muito amplo . Eu talvez exigisse que houvesse uma sequência de, digamos, quatro ou cinco em sequência. (Infelizmente, a variante regex do Procmail não suporta o quantificador numérico egrep 'co_de%; seria útil aqui.)
:0B
* [][!@#$%^&*(){}][][!@#$%^&*(){}][][!@#$%^&*(){}][][!@#$%^&*(){}][][!@#$%^&*(){}]
* ! </[a-zA-Z]+/>
$DEFAULT/MalSpam/
Se você observar com atenção, verá que o primeiro é [class]{5,} repetido cinco vezes. Se você quiser torná-lo mais longo (como 500 ocorrências adjacentes), basta repetir quantas vezes for necessário. Se a expressão inteira for maior que [][!@#$%^&*(){}] , você precisará observar também - se quiser criar espaço para uma regex de sete caracteres 500 vezes, ou seja, 10.200 bytes, é necessário certificar-se de que LINEBUF é pelo menos tão grande antes da receita que contém essa expressão longa.
Observe também como um sinalizador LINEBUF na receita elimina a necessidade de colocar B em cada linha de receita individual.
Se você quiser comparar a duração da mensagem, basta usar B ?? e o número desejado. Com o sinal > , :0B corresponderá a um corpo com mais de 512 bytes.
Para sua pergunta final, * > 512 é basicamente equivalente à classe de caractere \W (um único caractere que não está no intervalo [^A-Za-z0-9_] ou o intervalo A-Z ou o intervalo a-z ou o caractere 0-9 ).