Procmail规则与正则expression式

这里是我的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 

哪里错了?

这是一个非常基本的正则expression式错误。 为了匹配[或者(从字面上看,你必须用反斜线来避开它们)。

这同样适用于任何正则expression式元字符.*| 等等

另外,要无条件匹配,根本不要放任何条件。

我猜你们并不是真的只是在比赛结束后才允许空白,所以我也把它们拿出来了。 如果你想说“任何事情”,那就是正则expression式,但是在任何情况下都没有任何意义。

 :0 * ^Subject: \[JIRA] \(EDRV-.*\) .JIRA.edrive/new :0 * ^Subject: \[SPAM] .SPAM/new :0 * ^X-Spam-Status: Yes .SPAM/new :0 new 

你需要反斜杠转义正则expression式字符,你想匹配作为文字。

它看起来像你使用你的邮件存储在Maildir格式。 我不知道你是否排除了标题或没有。 这将把文件传递到适当的邮件子目录。 它包含一个日志文件,因此您可以validation邮件是否正确处理。

  #.procmailrc  -  procmailconfiguration文件

 #variables定义
 MAILDIR = $ HOME / Maildir的/
 LOGFILE = $ MAILDIR / procmail.log
 DEFAULT = $ MAILDIR 

这些规则应匹配邮件并将其传递到指定邮箱的new子文件夹。

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

 :0
 * ^主题:\ [垃圾邮件]
 。垃圾邮件/

 :0
 * ^ X-Spam-Status:是的
 。垃圾邮件/

 #剩下的东西去收件箱