2

以前に見たメールに返信するすべてのメールを投げる.procmailrcルールを作成する方法を理解しようとしています。maildirを使用しており、cur/またはnew/..のいずれかのメッセージをカバーするルールが必要です。

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

このアドレスがまだ見たことがないものへの返信であるかのように、in-reply-toヘッダーで何かをチェックして投げることはできません。それを受け入れる必要があります。

4

1 に答える 1

2

着信メッセージからMessage-Id:sのキャッシュを収集する必要があります。

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

次に、In-Reply-To:をこのキャッシュと照合します(おそらく.procmailrc、キャッシュにMessage-Idを追加する前にスパムをフィルタリングできるように、早い段階で)。

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

formail -D比較のためにの例も参照してください。おそらく、実際にバックエンドとして使用できる形式にマッサージすることができますformail -D(キャッシュに追加する前にMessage-Id:をFrom:に置き換え、In-Reply-To:を分割し、各message-idで同様の置換を実行します)。 formailは一定サイズのLRUキャッシュを維持できますが、fgrepファイルは無期限に大きくなり続けます(ただし、この場合、おそらくそれがまさに必要なものです)。

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

大きなキャッシュが必要な場合は、プレーンテキストファイルをSQLiteなどに置き換えることを検討する価値があります。実際、適切なデータベースが本当に努力する価値があるときまでに、SQLiteではなく実際のデータベースが必要になるかもしれませんが、私はこの種のことに対するさまざまなデータベースエンジンのスケーラビリティについて漠然とした考えしかなく、実際の経験はありません。

異常な設定がない限り、送信メッセージIDはキャッシュに追加されないことに注意してください。これが実際に役立つためには、おそらくそれが何らかの形で発生するように調整するか、送信メッセージIDに一致するパターンを確立する必要があります(理想的には誤検知がなく、間違いなく誤検知がありません。MUAを切り替えた場合過去には、完全なカバレッジが必要な場合は、古いメッセージのパターンを個別に探す必要があります)。

注意:テストされていません、そして私はおそらくかなり錆びています。

于 2011-09-08T07:19:12.477 に答える