Eximフィルタリングで正規表現を使用する

Eximフィルタリングで正規表現を使用する

以下を含むスパムをブロックするために exim フィルタを作成しようとしています。

「85%割引」

タイトル行に。スペース、2桁の数字、パーセント記号、スペース、およびすべて大文字の「OFF」という単語です。これが私が書いたものです:

# Exim filter
if
  $header_subject: contains " \\d{2}% OFF"
then
   fail text "no spam please"
   seen finish
endif

ところがこれはできないようで、マッチしたメッセージが渡されてもパススルーが許可されるようです。正規表現 101テスト。私は何を見逃していますか?正しい構文は何ですか?

答え1

一時的に私をあなたのもの.forwardと交換しましたが、うまくいかないことを確認しました。

2つの質問があります。

  1. contains部分文字列のマッチングを行いますが、正規表現を理解していません。matches代わりに、必要な正規表現を使用してくださいcontains

  2. PCREスタイルの文字クラスは、構文のように\d破損しているようです!{N}色々な組み合わせを試してみました。唯一の有効な構文は機能しなくても機能[0-9][0-9]しません。 (私はバージョン4.72を実行しています。)[0-9]{2}[0-9]\\{2\\}\\d\\d編集:理由は次のとおりです。 正規表現にスペースが含まれていない場合は、Eximフィルタファイルの正規表現を引用符で囲む必要はありません。しかし、引用符のない正規表現でもバックスラッシュは2倍になるはずです。引用された正規表現では、再度倍増する必要があります。$header_subject: matches "\\\\d{2}% OFF".count `em:バックスラッシュ4つ。

スクリプトテストを使用してください/usr/sbin/exim -bF <scriptfile> -f <sender>。テストメッセージは、標準入力(ファイルからリダイレクト)として提供する必要があります。

テストSubject:処理の場合、対応するヘッダー行のみを含め、他のものを含めることはできません。Fの大文字はコマンド処理を-bF有効にするために使用され、使用すると無効になります。fail-bf

関連情報