1

我已经使用 sylfilter 一年多了(可以从http://sylpheed.sraoss.jp/sylfilter/获得),它作为一个过滤工具非常有用(没有抱怨)。但是,我一直在尝试将 procmail 与 sylfilter 一起使用,但遇到了很多麻烦。

过滤器的网页显示:

sylfilter ~/Mail/inbox/1234

作为对消息进行分类的示例。

返回值如下:

0 垃圾(垃圾邮件)

1 清洁(非垃圾邮件)

2 不确定

127 其他错误

我一直在尝试将 sylfilter 与 procmail 合并,但没有取得多大成功。与 bogofilter 等其他垃圾邮件工具相比,最大的问题是 sylfilter 不会对电子邮件本身进行任何更改(与 bogofilter 不同,bogofilter 的示例在网络上比比皆是,并且在消息头)。我希望所有被归类为垃圾邮件的东西都转到 $HOME/Mail/Junk 以及不被进一步分类到文件夹中的所有东西,例如 procmail 规则。也许返回 2 的东西可以到 $HOME/Mail/uncertain。

这是我根据 Fedora 邮件列表中的建议进行的最新尝试。

:0 Wc
| /usr/bin/sylfilter /dev/stdin
:0 a
$HOME/Mail/Junk/.

但是,这不会使用 sylfilter 处理电子邮件消息(并且在继续处理其他规则之前,日志文件会显示“没有输入文件。”)。所以,我想知道这里是否有人知道类似的案例并知道这个问题的答案。

4

1 回答 1

0

我不熟悉sylfilter,并且(有点模糊)问题描述让我认为在标准输入上输入消息有问题。但如果你能做到这一点,下面是你如何在 Procmail 中检查程序的退出代码。

:0
* ? sylfilter /dev/stdin
$HOME/Mail/Junk/.

# You should now have the exit code in $? if you want it for further processing
SYLSTATUS=$?

:0
* SYLSTATUS ?? ^^1^^
$HOME/Mail/INBOX/.
# ... etc

如果sylfilter返回成功(零)退出代码,则条件成功;如果它失败了,我们就会进入后续的食谱。我们保存$?到一个命名变量,以便我们可以检查它的值,即使后续配方$?通过调用其他一些外部程序来重置系统全局。

顺便说一句,您不需要硬编码sylfilter. 如果它位于非标准位置,请PATH在您的开头进行修改,.procmailrc而不是使用指向可执行文件的显式路径乱扔代码。所以如果它在/usr/local/really/sf/sylfilter,你会放

PATH=/usr/local/really/sf:$PATH

如果您需要临时文件中的消息,请尝试这样的操作;

TMP=`mktemp -t sylf.XXXXXXXX`
TRAP='rm -f $TMP'
:0c
$TMP

:0
* ? sylfilter $TMP
$HOME/Mail/Junk/.

# etc as above

mktemp命令创建一个唯一的临时文件。该TRAP分配设置了在 Procmail 终止时运行的命令序列;这会在我们完成后清理临时文件。因为我们将是该文件的唯一写入者,所以在将消息副本写入该文件时我们不关心锁定。

有关更详细的语法细节,另请参阅http://www.iki.fi/era/procmail/quickref.html

于 2014-01-27T13:39:50.667 回答