「以前に見られたメッセージ-IDヘッダーに繰り返されるヘッダーの一致」のProcmailrcルール

StackOverflow https://stackoverflow.com/questions/7342218

  •  27-10-2019
  •  | 
  •  

質問

以前に見たメールに返信しているすべてのメールを投げる.procmailrcルールを持つ方法を見つけようとしています。 MailDirを使用し、ルールにcur/またはnew/ ...でメッセージをカバーすることを望みます。

すべてのファイルをprocmailrcを解析する必要がありますか?または、メッセージIDヘッダーを抽出し、それらをファイルに捨てて、それを解析するルールが必要ですか?

この住所がまだ見ていないものへの返信であるかのように、私は単に繰り返しヘッダーで何かをチェックして投げることはできません。

役に立ちましたか?

解決

あなたは、受信メッセージからのメッセージ-ID:sのキャッシュを収集する必要があります:

:0c:
| formail -zxMessage-Id: >>msgid.txt

次に、In-Reply-toを確認してください:このキャッシュに対して(おそらくあなたの早い段階で .procmailrc したがって、メッセージ-IDをキャッシュに追加する前にスパムをフィルタリングできます);

:0
* ? formail -zxIn-Reply-To: | fgrep -f msgid.txt -
./whitelisted

の例も参照してください formail -D 比較のために。おそらく、あなたは物事を実際に使用できるフォームにマッサージできます formail -D バックエンドとして(メッセージ-IDを置き換えます:from:キャッシュに追加する前に、in-reply-to:and to:同様のメッセージIDで同様の置換を実行します)。 formail 一定サイズのLRUキャッシュを維持できますが、 fgrep ファイルは無期限に成長し続けます(この場合、おそらくそれはまさにあなたが望むものです)。

最初にこれを設定したとき、あなたはおそらくあなたが持っているメッセージからキャッシュを収集する必要があります curnew すでにですが、その後、レシピからそれらのメッセージをもう一度参照する必要はありません。 (受信トレイが私のようなものである場合、受信トレイ全体のリアルタイムグレッピングは非常に実行不可能です。)

大きなキャッシュが必要な場合は、プレーンテキストファイルをsqliteまたは何かに置き換えることは、おそらく調べる価値があります。実際、適切なデータベースが本当に努力する価値がある頃には、SQLiteではなく実際のデータベースが必要かもしれませんが、この種のことで異なるデータベースエンジンのスケーラビリティについて曖昧なアイデアしか持っておらず、実際の経験はありません。

珍しいセットアップがない限り、発信メッセージID:sはキャッシュに追加されないことに注意してください。これが実際に有用であるためには、おそらくそれが何らかの形で起こるように手配し、/または発信メッセージIDに一致するパターンを確立する必要があります:s(理想的には偽陽性がなく、確かに偽陰性がないことは確かです。MUASを切り替えた場合過去には、完全なカバレッジが必要な場合は、おそらくあなたの古いメッセージのパターンを個別に探す必要があります。

注意:テストされていない、そして私はおそらく非常にさびた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top