Estou usando procmail
regras Maildir/
fáceis como a abaixo para salvar e-mails recebidos em diretórios:
:0:
* ^X-Spam-Status: Yes
Spam/
Agora eu gostaria de uma notificação na área de trabalho sobre novos e-mails em determinados diretórios/regras, já sei como lidar com notificações, mas como saber procmail
para salvar em um diretórioeexecutar um script?
Eu sei que possocanoa |command
, mas eu preferiria deixar procmail
salvar o arquivo e depois executar um script.
Ter o e-mail (pelo menos cabeçalhos) no canal ou o caminho dir+arquivo como argumentos seria bom, executar o script assíncrono também seria bom.
atualizar
Então, com base na resposta do @slm, esse é o resultado:
:0 c:
* ^X-Spam-Status: Yes
Spam/
:0 Whi
* ^X-Spam-Status: Yes
| $HOME/install/bin/notify.sh
c
cópia dea mensagem no diretório, mas continua com as próximas regras
Não estou usando f
porque não é um filtro, se a regra corresponder quero que o procmail pare por aqui (espero não estar entendendo mal o manual aqui)
W
para suprimir qualquer falha do programa
h
paracanoapenas cabeçalhos
i
ignorar qualquer erro de gravação no pipe
Não estou usando w
porque não quero esperar o script retornar
Acho que também não preciso de um arquivo de bloqueio (não :
depois Whi
)
atualização 05/12/14
No final adotei exatamente a solução proposta por @tripleee.
Brinquei também por mailutils-comsatd
alguns minutos antes de desistir.
.procmailrc:
COMSAT=no
Responder1
Para executar o e-mail por meio de um script, você pode modificar sua regra usando 2 regras:
:0: c
* ^X-Spam-Status: Yes
Spam/
:0: fw
* ^X-Spam-Status: Yes
| /usr/bin/python /work/scripts/process_mail.bash
Seu programa receberá o e-mail no STDIN. Você terá que 'ecoar' o e-mail possivelmente transformado em STDOUT.
fw significa:
f
Considere o tubo como um filtro.w
Aguarde o término do filtro ou programa e verifique seu código de saída (normalmente ignorado); se o filtro não for bem-sucedido, o texto não terá sido filtrado.c
Gere uma cópia carbono deste e-mail. Isso só faz sentido na entrega de receitas. A única receita de não entrega na qual este sinalizador tem efeito é em um bloco de aninhamento, para gerar uma cópia carbono, isso clonará o processo procmail em execução (os arquivos de bloqueio não serão herdados), pelo que o clone prosseguirá normalmente e o pai vai pular através do bloco.
Referências
Responder2
Aqui está uma ligeira adaptação da resposta do @slm.
Você não deve usar o bloqueio com o Maildir, e os sinalizadores e os dois pontos de bloqueio estavam ao contrário. (Você criaria efetivamente um arquivo de bloqueio chamado c
, em vez de clonar a mensagem, para que a segunda ação nunca fosse acionada.)
A f
bandeira parece fora de lugar.
Inverti a ordem das ações; embora faça sentido entregar e depois notificar, do ponto de vista do Procmail, a notificação é uma ação secundária que pode falhar, então faço isso em um clone e ignoro seu status de saída.
Finalmente, agrupar duas ações sob uma condição é mais intuitivo usando colchetes.
:0
* ^X-Spam-Status: Yes
{
:0cWhi
| $HOME/install/bin/notify.sh
:0
Spam/
}
Dito isto, observo também que o Procmail já gera comsat
notificações prontas para uso. Esse é um protocolo de notificação legado, mas você pode usá-lo para alguma coisa. Em segundo lugar, um mecanismo de notificação simples poderia ser construído usando um script que monitorasse o seu procmail.log
. (Mas sim, analisar arquivos de log é uma droga.)