0

我在下面使用的是有效的,但测试电子邮件同时出现在收件箱和目标文件夹(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 
4

2 回答 2

1

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

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

http://ziggr.com/pairmail/

EXITCODE=99 告诉 qmail 我们将负责传递每条消息,并且 qmail 不需要将其传递到邮箱。如果我们不这样做,qmail 将看到默认的返回码 0(OK)并将其解释为“过滤程序说电子邮件是可以接受的,所以现在我应该发送它”。这会导致您邮箱中所有邮件的重复副本以及已过滤的垃圾邮件/火腿副本降落在垃圾邮件/火腿邮箱中。

该页面包含一个图表,显示 qmail 如何处理邮件,以及恢复 spamassassin 过滤的方法。我自己的过滤在收件箱中没有重复登陆,等待找出垃圾邮件过滤是否正常。

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}
于 2015-01-28T07:20:18.020 回答
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 并逃脱它——只要你不改变它,它可以是任何东西(但 Shirley 是一个坏选择,因为您会忘记它的含义并致电您的 ISP 的支持并歇斯底里地声称某些雪莉似乎已经入侵了您的盒子)。

带有c标志的配方未从手册页中完全转录procmailex(5)——这是一个示例,说明如何将可疑重复项存储在单独的邮箱中,而不是将它们丢弃,以防万一。

我知道,别叫我雪莉。

于 2015-01-27T08:20:01.597 回答