这里是我的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:是的 。垃圾邮件/ #剩下的东西去收件箱