着信メッセージから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を切り替えた場合過去には、完全なカバレッジが必要な場合は、古いメッセージのパターンを個別に探す必要があります)。
注意:テストされていません、そして私はおそらくかなり錆びています。