Eu reescrevo a linha de assunto para certos e-mails recebidos dependendo do campo TO::
:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPAM]$MATCH"
O código acima (da minha pergunta anteriorprocmail reescreve a linha de assunto se o usuário destinatário do email falhar no teste de correspondência) funciona perfeitamente - se eu receber mensagens de algo DIFERENTE[e-mail protegido], a linha de assunto é reescrita como [SPAM] (assunto original)
Mas eu gostaria de fazer várias condicionais como esta - o bloco de trabalho acima será o final, mas antes disso, gostaria de reescrever a linha de assunto se TO corresponder a um endereço diferente.
Então adicionei este bloco logo acima dele:
:0fh
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH"
$DEFAULT
... e isso funciona - e-mails enviados para '[e-mail protegido]' ter sua linha de assunto reescrita.
O problema é que o Procmail não para - ele passa para opróximobloco e o reescreve novamente. Portanto, e-mails enviados para [email protected]
ter suas linhas de assunto reescritas como:
[SPAM] [ESPECIAL] Linha de assunto original, blá, blá
Por que é isso? Por que a ação no final do primeiro bloco não $DEFAULT
faz com que o Procmail interrompa o processamento desse email?
Como posso combinar o novo bloco epararprocessar aquela correspondência e simplesmente terminar com ela?
Responder1
O $DEFAULT
final é um erro de sintaxe. Não é possível especificar diversas ações na mesma receita.
O que você pode fazer é dividir em duas receitas; ou, neste caso, simplesmente combinar a reescrita e a entrega.
:0:
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH" >>$DEFAULT
Isso não tem mais sinalizadores fh
porque queremos enviar toda a mensagem (não apenas os cabeçalhos, o que h
tem) e queremos entregar, e não capturar os resultados do pipeline de volta ao Procmail (que f
tem).
Isso pressupõe que $DEFAULT
seja um arquivo, não um diretório; e assim também adicionamos um segundo :
para especificar o bloqueio.
Se você quiser especificar duas ações sob um único conjunto de condições, poderá usar colchetes com várias receitas dentro deles. Cada receita pode ter zero ou mais condições, mas apenas uma ação.
:0
* ^TO_special@domain\.com
* ^Subject:\/.+
{
:0fhw
| formail -I"Subject: [SPECIAL]$MATCH"
:0:
$DEFAULT
}
mas neste caso é uma complicação desnecessária.
(Talvez também fosse mais idiomático mover a ^Subject:
condição para a formail
receita à qual ela pertence logicamente, mas, de qualquer forma, isso é apenas uma tangente.)
Também tangencialmente, talvez certifique-se de que PATH
está correto logo no início do seu, .procmailrc
para evitar especificar o caminho completo para utilitários externos como formail
.