procmailフィルターをmaildir受信トレイに適用するにはどうすればよいですか?


9

昨夜、メーリングリストにサブスクライブしましたが、今朝、procmailフィルターが多くのメーリングリストメッセージに適用されていないことがわかりました。現在、重要性の低いメーリングリストメッセージが大量にあり、重要性の高い仕事用メールが受信トレイに置かれています。

procmailフィルターを使用して、受信トレイ内のすべての電子メールを再実行することは可能ですか?

注:私はmaildir形式を使用しています



それは部分的な解決策を提示します。この場合、一部のメールは間違いなく受信トレイにルーティングされます。既存のメール配信プロセスをシミュレートするスクリプトを作成するのではなく、この問題にはすでに気付いていない* nuxソリューションがすでにあるようです。
Cory Klein

あなたがする必要があるのいずれかの配信をシミュレートします。この手段-問題は、それは、フォルダ、mboxesまたは何か他のものでは動作しません、メールメッセージ上で動作procmailがあるか、そこにThunderbirdとフィルタそれを好きなものを使用。
Ulrich Dangel 2012年

回答:


3

これでうまくいくと思います。を実行formailしてメールを再フォーマットし、を介して送り返す必要がありますprocmail

Maildirディレクトリから:

cat * | formail -s procmail


3
これは実際に機能しますか?それは彼らがいた場所にすべての古いメッセージを残しませんか?
cnst 2013

2

次のように、その場で実行できる場合があります。

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

その後、元のメールをそれぞれ削除する必要があります。そうしないと、procmailがそれを複製します。

また、すべてを新しいものとして記録します。それを処理するための良い方法がわかりません。


これはディスクioでは無駄に見えます。通常、procmailのフィルタリングはヘッダーに基づいてのみ行われますが、このようなパイプ処理により、メッセージ全体がディスクに読み書きされ、最初からもう一度書き込まれます。さらに、procmailがメモリ不足になったり、他の問題が発生したりした場合でも、無条件にファイルを削除(ouch!)します。これもかなり恐ろしいようです。maildirに関しては、これはまったく受け入れられない解決策だと思います。
cnst 2013

1
procmail < $m && rm $m代わりにを実行するprocmail < $m ; rm $mことで、これを段階的に改善でき、少なくともprocmailが失敗した場合にメッセージが削除されないようにすることができます。
rrauenza 2017

2

muttを使用している場合は、procmailを介して電子メールをパイプし、次のようなキーコマンドを使用して受信トレイからオリジナルを削除することもできます。

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>'

見つかったhttps://mikeburnscoder.wordpress.com/2011/06/12/one-big-mutt-inbox-filtered-after-the-fact-using-procmail/


1

これには良い解決策がないようです:procmailはstdinmaildirアプリケーションを制限するからのメール入力のみを受け入れるようです。

私も同じような状況に直面していて、自分のニーズに合った最善の解決策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や潜在的なデータ損失の問題が発生することはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.