Eu tenho um usuário procmail local "bob".
Se um e-mail chegar e corresponder[e-mail protegido], nenhuma ação deverá ser tomada.
No entanto, se um e-mail chegar e for [anything_else]@domain.com, gostaria de reescrever a linha de assunto para inserir "[spam]" no início da linha de assunto.
Portanto, é uma correspondência reversa em "bob@" (correspondência com qualquer coisa que não seja bob@) e preservamos a linha de assunto original, apenas acrescentando "[spam]" no início dela.
Como posso fazer isso com o Procmail?
Responder1
Seus requisitos não são claros. O Procmail pode corresponder a qualquer string, mas você realmente pretende procurar a string em qualquer lugar da mensagem? E você realmente pretende ignorar mensagens sem domain.com
elas para os fins desta regra?
:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
:0fhw
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
}
Os limites \<
das \>
palavras e impedem a correspondência em substrings como tombob
ou subdomain.complete.org
, e os parênteses vazios são um hack porque o Procmail é estranho com expressões regulares que começam com uma barra invertida.
Se você quer olhar apenas nos cabeçalhos, elimine o HB
da primeira linha de dois pontos (você pode deixar o, H
mas esse é o padrão se você não colocar nenhum sinalizador). Se você quiser corresponder a um cabeçalho específico, soletre-o. Se você deseja examinar o destinatário especificamente, a ^TO_
macro permite fazer isso facilmente em vários cabeçalhos diferentes ( To:
, Cc:
, etc).
:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
Como eliminamos as HB
bandeiras, podemos combinar o que antes eram duas receitas com bandeiras diferentes. A segunda ^TO_
verifica qualquer endereço incluindo bob
, que entretanto já foi excluído pela condição negada anterior.
Isto ainda tem alguns casos que podem precisar ser mais explorados; se você puder editar sua pergunta para esclarecê-la, talvez eu possa atualizá-la para cobrir mais do que o básico.
No entanto, o SMTP não exige que o destinatário seja especificado nos cabeçalhos. O caso clássico é Bcc:
que também é essencialmente o mecanismo usado por muitas listas de discussão. Talvez o seu MTA especifique o destinatário, Delivered-To:
mas falando corretamente, esse tipo de filtro é melhor implementado no MTA.