procmail reescreve a linha de assunto se o usuário destinatário do email falhar no teste de correspondência

procmail reescreve a linha de assunto se o usuário destinatário do email falhar no teste de correspondência

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.comelas 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 tombobou 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 HBda primeira linha de dois pontos (você pode deixar o, Hmas 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 HBbandeiras, 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.

informação relacionada