这是我的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
这是一个非常基本的正则表达式错误。为了匹配[
或(
字面意思,您必须使用反斜杠对其进行转义。
这同样适用于任何正则表达式元字符 - ,,,.
等等。*
|
另外,要想无条件匹配,只需不设置任何条件即可。
我猜你并不是真的想只允许匹配后的空格,所以我也把它们去掉了。如果你想说“任何东西”,那是.*
在正则表达式中,但没有必要设置匹配任何东西的条件。
:0
* ^Subject: \[JIRA] \(EDRV-.*\)
.JIRA.edrive/new
:0
* ^Subject: \[SPAM]
.SPAM/new
:0
* ^X-Spam-Status: Yes
.SPAM/new
:0
new
答案2
您需要使用反斜杠转义要作为文字匹配的正则表达式字符。
看起来您正在使用的邮件是以 Maildir 格式存储的。我不知道您是否排除了邮件头或没有邮件头。这会将文件传送到相应的邮件子目录。它包含一个日志文件,以便您可以验证邮件是否得到正确处理。
#.procmailrc-procmail 配置文件 # 变量定义 MAILDIR=$HOME/Maildir/ LOGFILE=$MAILDIR/procmail.log 默认值=$MAILDIR
这些规则应该与消息匹配并将其传递到new
指定邮箱的子文件夹中。
:0 * ^主题:\[JIRA\] \(EDRV-.*\) .JIRA.edrive/ :0 * ^主题:\[垃圾邮件\] 。垃圾邮件/ :0 * ^X-Spam-Status:是 。垃圾邮件/ # 剩余内容将进入收件箱