昨夜、メーリングリストにサブスクライブしましたが、今朝、procmailフィルターが多くのメーリングリストメッセージに適用されていないことがわかりました。現在、重要性の低いメーリングリストメッセージが大量にあり、重要性の高い仕事用メールが受信トレイに置かれています。
procmailフィルターを使用して、受信トレイ内のすべての電子メールを再実行することは可能ですか?
注:私はmaildir形式を使用しています
昨夜、メーリングリストにサブスクライブしましたが、今朝、procmailフィルターが多くのメーリングリストメッセージに適用されていないことがわかりました。現在、重要性の低いメーリングリストメッセージが大量にあり、重要性の高い仕事用メールが受信トレイに置かれています。
procmailフィルターを使用して、受信トレイ内のすべての電子メールを再実行することは可能ですか?
注:私はmaildir形式を使用しています
回答:
次のように、その場で実行できる場合があります。
$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done
その後、元のメールをそれぞれ削除する必要があります。そうしないと、procmailがそれを複製します。
また、すべてを新しいものとして記録します。それを処理するための良い方法がわかりません。
procmail < $m && rm $m
代わりにを実行するprocmail < $m ; rm $m
ことで、これを段階的に改善でき、少なくともprocmailが失敗した場合にメッセージが削除されないようにすることができます。
muttを使用している場合は、procmailを介して電子メールをパイプし、次のようなキーコマンドを使用して受信トレイからオリジナルを削除することもできます。
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>'
これには良い解決策がないようです:procmailはstdin
maildirアプリケーションを制限するからのメール入力のみを受け入れるようです。
私も同じような状況に直面していて、自分のニーズに合った最善の解決策procmail
は、やりたいことを単純に複製することでしたが、1つまたは2つの単純なルールしかない場合は十分なはずの、独自の小さなスクリプトを使用してそれを行うことはできません。あなたが世話をする必要があること:
cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: perforce@freebsd.org" cur/*`; \
do mv $i .FreeBSD.perforce/$i; done'
これも最適ではありませんが、少なくとも、不要なIOや潜在的なデータ損失の問題が発生することはありません。