ここで同様の質問を読みましたが、すべての正規表現が等しく作成されていないため、問題の解決策を見つけることができませんでした.
私は、受信者の電子メール ユーザー名がメッセージの本文に含まれているかどうかを通知する SpamAssassin のルールに取り組んでいます。たとえば、に送信された電子メールは、メッセージの本文にtestuser@somedomain.com
含まれています。Regex-101testuser
で正規表現を作成してテストし、期待どおりに一致させることができましたが、ルールを作成して SpamAssassin でテストすると機能しません。
式は次のとおりです。
/To:\s([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
すべきことは、To:
ヘッダーの電子メール アドレス(または形式に一致するメッセージの本文の任意の場所) と一致することですTo: user@somedomain.com
。前述のように、式は Regex-101 で期待どおりに一致しますが、SpamAssassin でルールを作成すると、 、一致しません。
先頭を削除すると一致しますが、ヘッダーTo:\s
内の電子メールの一致のみに関心があります。To:
私は式のこれらのさまざまな突然変異を試しました:
/To:\s([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
/To: ([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
/To:[\s]{0,2}([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
/:\s([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
/\s([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
前のルールはどれも一致しませんが、次のルールは一致します。
/([a-z0-9][-a-z0-9]{1,19})\@somedomain\.com[a-z0-9\s=;:\/\.-]*\1\b/i
テストに使用するテキストは次のとおりです。
Subject: Test spam mail (GTUBE) private jet rental
Message-ID: <GTUBE1.1010101@example.net>
Date: Wed, 23 Jul 2003 23:30:00 +0200
From: Sender <sender@live.com>
To: recipient@somedomain.com
Precedence: junk
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
recipient
This is the GTUBE, the
Generic
Test for
Unsolicited
Bulk
Email
....で一致する必要To: recipient@somedomain.com
がありますが、式からrecipient
を削除した場合にのみ一致させることができTo:\s
ます。完全な式は Regex-101 でテストされるため、SpamAssassin に固有のもののようですが、よくわかりません。
編集
これは、ユーザー名の末尾にダッシュを許可せず、途中で許可する式の更新バージョンです。
/\bTo:\s([a-z0-9][-a-z0-9]{0,18}[a-z0-9])\@somedomain\.com[a-z0-9\s=;:\/\.-]*\b\1\b/i