Procmail复制消息而不是移动它

时间:2015-01-24 00:13:36

标签: procmail

我在下面使用的内容有效,但测试邮件会同时登录收件箱和目标文件夹(Stuff)。有没有办法避免重复的imap消息?

VERBOSE=on
PATH=/usr/bin:/usr/local/bin
MAILDIR=$HOME/boxes/domain.com/fred^/.imap/
LOGFILE=$HOME/proclog
SHELL=/bin/sh

:0:
* ^Subject:.*test
Stuff

日志结果:

procmail: Assigning "SHELL=/bin/sh"
procmail: Match on "^Subject:.*test"
procmail: Locking "Stuff.lock"
procmail: Assigning "LASTFOLDER=Stuff"
procmail: Opening "Stuff"
procmail: Acquiring kernel-lock
procmail: Unlocking "Stuff.lock"
procmail: Notified comsat: "username@number:/usr/home/username/boxes/domian.com/fred^/.imap//Stuff"
From person@email.com Sat Jan 24 00:04:42 2015
Subject: test
Folder: Stuff                                  2213

更新: 假设消息在找到匹配项时重复,请按照以下方式排序,然后检测并消除重复:

VERBOSE=yes
LOGABSTRACT=all
PATH=/usr/bin:/usr/local/bin
LOGFILE=$HOME/proclog
SHELL=/bin/sh

MAILDIR=$HOME/boxes/mydomain.com/
INBOX=$HOME/boxes/mydomain.com/fred
STUFF=$HOME/boxes/mydomain.com/fred^/.imap/Stuff

:0
* ^Subject:.*test
${STUFF}

:0 Whc: msgid.lock
| formail -D 4096 $MAILDIR/msgid.cache

:0 a:
dev/null

我也见过这个例子:

:0 Wh:dup
| formail -D 4096 $MAILDIR/msgid.cache 

2 个答案:

答案 0 :(得分:1)

非常感谢您的所有深思熟虑的投入。你的绝对正确,与procmail无关,并且避开了Pair Networks支持。顺便说一句,没有其他食谱在使用。

幸运的一招:发现了一个非常有帮助的Pair Networks用户的古老帖子,解释了如何在不让qmail干扰的情况下编写食谱。

http://ziggr.com/pairmail/

  

EXITCODE = 99告诉qmail我们将负责传递每条消息,并且qmail不需要将其传递给   邮箱。如果我们不这样做,qmail会看到默认的返回   代码0(确定)并将其解释为"过滤器程序表示电子邮件   是可以接受的,所以现在我应该提供它。"这导致重复   登录邮箱并过滤的所有邮件的副本   垃圾邮件/火腿副本登陆垃圾邮件/火腿邮箱。

该页面上的图表显示了qmail如何处理邮件,以及恢复spamassassin过滤的方法。我自己的过滤工作没有在INBOX中重复登陆,并等待查明垃圾邮件过滤是否正常。

LOGFILE=$HOME/proclog
VERBOSE=YES 

# prevent qmail (the program that is calling procmail 
# as a filter) from delivering the original mail.
EXITCODE=99 

MAILDIR=$HOME/boxes/domain.com
INBOX=$MAILDIR/fred
GREY=$MAILDIR/fred^/.imap/grey
JUNK=$MAILDIR/fred^/.imap/Junk
TEST=$MAILDIR/fred^/.imap/Test 


# Spam level 5.0 or greater 
:0
* ^X-Spam-Level: \*\*\*\*\* 
${JUNK}

# Spam level 2.0-4.9: hold in grey area 
:0
* ^X-Spam-Level: \*\* 
${GREY} 

:0:
* ^Subject:.*test
${TEST}

# Spam level < 2.0: it's probably real email, deliver as normal 
:0:
${INBOX}

答案 1 :(得分:0)

您的问题似乎与Procmail无关。如果重复项由Procmail处理(并且您向我们展示了所有食谱),它们将被传递到与您正在处理的邮件相同的邮箱Stuff,而不是邮箱。您需要检查提供商的Postfix配置,或者只是在他们的支持下提出这个问题。

除此之外,还有一些可以对您的Procmail处理做出的澄清。在传递消息后执行重复检测是没有意义的:当传递消息时,Procmail完成,并且永远不会执行以下配方。

你所拥有的食谱有点错误,因为你拼写错误/dev/null,但也非常低效,因为你只是复制一条消息而把它扔掉。丢弃重复的标准配方只是

:0Wh:msgid.lock
| formail -D 8192 msgid.cache

但最重要的是,这需要在之前任何交付配方。如果消息与我们之前看到的消息重复,那么这个有效地传达到了天堂;所以,Procmail停止处理然后在那里。 (发送“发送”是因为邮件传递给formail以进行传递,当然不会将其传递到任何地方。如果不是重复,formail - 在此特定模式下,使用-D选项 - 表示错误,导致Procmail捕获错误并继续使用下一个配方,希望这会成功。)

你所谓的锁文件并不重要,但msgid.lock非常标准。主要的是两个Procmail实例需要使用相同的锁定文件,所以你可以称之为Shirley并躲开它 - 只要你不改变它,它就可以是任何东西(但是雪莉是个坏人)选择因为你会忘记它意味着什么,并打电话给你的ISP的支持,并歇斯底里声称一些Shirley似乎已经攻击了你的盒子。)

具有c标志的食谱未在procmailex(5)手册页中完整转录 - 这是一个如何将可疑重复项存储在单独的邮箱中而不是将其丢弃的示例,以防万一。

我知道,不要叫我雪莉。