web-dev-qa-db-ja.com

正規表現を使用したProcmailルール

これが私のprocmailレシピです:

:0
* ^Subject: [JIRA] (EDRV-*) *$
.JIRA.edrive/new

:0
* ^Subject: [SPAM] *$
.SPAM/new

:0
* ^X-Spam-Status: Yes
.SPAM/new

:0
* .*
new

件名に[JIRA](EDRV-XXX)が含まれるメッセージをメールボックスのJIRA/edriveフォルダーに入れ、件名に[SPAM]が付いているメッセージをSPAMフォルダーに入れたい。

しかし、私が今得ているもの:

procmail: [8652] Sat Aug 27 19:08:19 2016
procmail: Assigning "Shell=/bin/bash"
procmail: No match on "^Subject: [JIRA] (EDRV-*) *$"
procmail: No match on "^Subject: [SPAM] *$"
procmail: No match on "^X-Spam-Status: Yes"
procmail: Match on ".*"
procmail: Assigning "LASTFOLDER=new/msg.qVktB"
procmail: Opening "new/msg.qVktB"
procmail: Acquiring kernel-lock
 Subject: [JIRA] (EDRV-100) xxxxxxx
  Folder: new/msg.qVktB><------><------><------><------><------><------>   2795

どこが間違いですか?

1
Green Root

これは非常に基本的な正規表現エラーです。 [または(を文字通り一致させるには、バックスラッシュでそれらをエスケープする必要があります。

同じことが正規表現のメタ文字にも当てはまります-.*|など。

また、無条件に一致させるために、単に条件を設定しないでください。

試合後に空白だけを許可するつもりはなかったと思うので、私もそれらを削除しました。 「何でも」と言いたい場合、それは正規表現の.*ですが、条件が何かに一致することには意味がありません。

:0
* ^Subject: \[JIRA] \(EDRV-.*\)
.JIRA.edrive/new

:0
* ^Subject: \[SPAM]
.SPAM/new

:0
* ^X-Spam-Status: Yes
.SPAM/new

:0
new
2
tripleee

リテラルとして一致させたいエスケープ正規表現文字をバックスラッシュする必要があります。

メールを使用しているようですが、Maildir形式で保存されています。ヘッダーを除外したのか、持っていないのかわかりません。これにより、ファイルが適切なメールサブディレクトリに配信されます。メッセージが正しく処理されたことを確認できるように、ログファイルが含まれています。

#.procmailrc-procmail構成ファイル
 
#変数定義
 MAILDIR = $ HOME/Maildir/
LOGFILE= $ MAILDIR/procmail.log 
 DEFAULT = $ MAILDIR

これらのルールはメッセージと一致し、指定されたメールボックスのnewサブフォルダーに配信する必要があります。

:0 
 * ^件名:\ [JIRA \] \(EDRV-。* \)
。JIRA.edrive /

:0
 * ^件名:\ [SPAM \] 
。SPAM/

:0 
 * ^ X-スパム-ステータス:はい
。 SPAM /

#残っているものはすべて受信トレイに送られます
0
BillThor