Como posso aplicar meus filtros do procmail à minha caixa de entrada do maildir?


9

Ontem à noite, inscrevi-me em uma lista de discussão e descobri hoje de manhã que meu filtro procmail não se aplicava a muitas das mensagens da lista de discussão. Agora, tenho muitas mensagens de lista de correio menos importantes intercaladas com meus e-mails de trabalho mais importantes na minha caixa de entrada.

É possível executar novamente todos os e-mails da minha caixa de entrada através dos meus filtros do procmail novamente?

Nota: estou usando o formato maildir



Isso apresenta uma solução parcial. Nesse caso, alguns e-mails definitivamente seriam roteados de volta para a caixa de entrada. Parece que já deve haver alguma solução * nux para esse problema que eu simplesmente não estou ciente, em vez de escrever um script para simular o processo de entrega de email existente.
Cory Klein

O problema é que o procmail funciona apenas em mensagens de correio, não funciona em pastas, mboxes ou qualquer outra coisa - isso significa que você precisará simular a entrega ou usar algo como thunderbird e filtrá-la lá.
precisa

Respostas:


3

Eu acredito que isso vai funcionar. Você precisa executar formailpara reformatar o email e enviá-lo de volta procmail.

No diretório Maildir:

cat * | formail -s procmail


3
Isso realmente funciona? Não deixaria todas as mensagens antigas onde estavam?
CNT

2

você pode fazer isso no lugar, assim:

$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done

Você precisa remover cada email original posteriormente ou o procmail o duplicará.

Ele também gravará tudo como novo. Não tenho certeza de uma boa maneira de lidar com isso.


Isso parece um desperdício no disco io: a filtragem do procmail geralmente é feita apenas com base nos cabeçalhos, mas essa tubulação fará com que toda a mensagem seja lida e gravada no disco novamente. Além disso, se o procmail ficar sem memória ou encontrar algum outro problema, você ainda remove o arquivo incondicionalmente (ai!), O que também parece assustador. Eu diria que esta é uma solução completamente inaceitável no que diz respeito ao maildir.
CNT

1
Isso pode ser incrementalmente aprimorado ao procmail < $m && rm $minvés disso procmail < $m ; rm $m, pelo menos a mensagem não será removida se o procmail falhar.
Rruenza

2

Se você estiver usando o mutt, poderá canalizar o email pelo procmail e também excluir o original da sua caixa de entrada com um comando-chave semelhante a este:

muttrc:

macro index y '<enter-command>unset wait_key<enter><tag-prefix><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><tag-prefix><delete-message><enter-command>set wait_key<enter>'

macro pager y '<enter-command>unset wait_key<enter><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><delete-message><enter-command>set wait_key<enter>'

encontrado em https://mikeburnscoder.wordpress.com/2011/06/12/one-big-mutt-inbox-filtered-after-the-fact-using-procmail/


1

Parece que não há uma boa solução para isso: o procmail parece aceitar apenas a entrada de stdine- mail , o que limita os aplicativos principais.

Enfrentei uma situação semelhante, e a melhor solução que atendia às minhas necessidades era simplesmente duplicar o que eu queria procmailfazer, mas o que definitivamente não pode fazer, com meu próprio pequeno script, que seria suficiente se você tivesse apenas uma ou duas regras simples que você precisa cuidar de:

cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: perforce@freebsd.org" cur/*`; \
    do mv $i .FreeBSD.perforce/$i; done'

Isso também não é o ideal, mas pelo menos não deve sofrer IO desnecessário e possíveis problemas de perda de dados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.