これが私の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
どこが間違いですか?
これは非常に基本的な正規表現エラーです。 [
または(
を文字通り一致させるには、バックスラッシュでそれらをエスケープする必要があります。
同じことが正規表現のメタ文字にも当てはまります-.
、*
、|
など。
また、無条件に一致させるために、単に条件を設定しないでください。
試合後に空白だけを許可するつもりはなかったと思うので、私もそれらを削除しました。 「何でも」と言いたい場合、それは正規表現の.*
ですが、条件が何かに一致することには意味がありません。
:0
* ^Subject: \[JIRA] \(EDRV-.*\)
.JIRA.edrive/new
:0
* ^Subject: \[SPAM]
.SPAM/new
:0
* ^X-Spam-Status: Yes
.SPAM/new
:0
new
リテラルとして一致させたいエスケープ正規表現文字をバックスラッシュする必要があります。
メールを使用しているようですが、Maildir形式で保存されています。ヘッダーを除外したのか、持っていないのかわかりません。これにより、ファイルが適切なメールサブディレクトリに配信されます。メッセージが正しく処理されたことを確認できるように、ログファイルが含まれています。
#.procmailrc-procmail構成ファイル #変数定義 MAILDIR = $ HOME/Maildir/ LOGFILE= $ MAILDIR/procmail.log DEFAULT = $ MAILDIR
これらのルールはメッセージと一致し、指定されたメールボックスのnew
サブフォルダーに配信する必要があります。
:0 * ^件名:\ [JIRA \] \(EDRV-。* \) 。JIRA.edrive / :0 * ^件名:\ [SPAM \] 。SPAM/ :0 * ^ X-スパム-ステータス:はい 。 SPAM / #残っているものはすべて受信トレイに送られます