procmail は、電子メール受信者のユーザーが一致テストに失敗した場合、件名を書き換えます。

procmail は、電子メール受信者のユーザーが一致テストに失敗した場合、件名を書き換えます。

ローカル procmail ユーザー「bob」がいます。

メールが届き、一致する場合[メールアドレス]、何もする必要はありません。

ただし、メールが届き、[anything_else]@domain.com の場合は、件名を書き換えて、件名の先頭に「[spam]」を挿入したいと思います。

つまり、「bob@」の逆一致(bob@以外の一致)となり、元の件名はそのまま保持され、その先頭に「[spam]」が付加されます。

Procmail でそれを実行するにはどうすればよいですか?

答え1

要件がかなり不明確です。Procmail は任意の文字列に一致できますが、本当にメッセージ内の任意の場所で文字列を検索するつもりですか? また、domain.comこのルールの目的のために、文字列が含まれていないメッセージを無視するつもりですか?

:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
    :0fhw
    * ^Subject:\/.+
    | formail -I"Subject: [spam]$MATCH"
}

および\<\>単語境界は、tombobまたはのような部分文字列での一致を防止しますsubdomain.complete.org。また、空の括弧は、Procmail がバックスラッシュで始まる正規表現に対して異常な動作をするため、ハックです。

ヘッダーのみを調べたい場合は、HB最初のコロン行から を削除します ( は残すことができますHが、フラグを付けない場合はこれがデフォルトです)。特定のヘッダーに一致させたい場合は、そのヘッダーをスペルアウトします。受信者を具体的に調べたい場合は、マクロを使用すると、さまざまなヘッダー ( 、など)^TO_で簡単に調べることができます。To:Cc:

:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"

フラグを削除したためHB、以前は異なるフラグを持つ 2 つのレシピだったものを結合できます。 2 番目は^TO_を含むアドレスをチェックしますがbob、これは前の否定条件によってすでに除外されています。

これにはまだいくつかの特殊なケースがあり、さらに調査する必要があるかもしれません。質問を編集して明確にしていただければ、基本的な内容以上の内容をカバーするようにこれを更新できるかもしれません。

ただし、SMTP では、受信者をヘッダーに記述する必要はありません。典型的なケースは で、Bcc:これは基本的に多くのメーリング リストで使用されているメカニズムでもあります。おそらく MTA は受信者を に記述しますが、Delivered-To:厳密に言えば、このタイプのフィルターは MTA に実装する方が適切です。

関連情報