将sylfilter与procmail一起使用

将sylfilter与procmail一起使用,filter,spam,procmail,Filter,Spam,Procmail,我已经使用sylfilter一年多了(可以从中获得),它作为一个过滤工具非常有效(没有投诉)。然而,我一直在尝试将procmail与sylfilter一起使用,但是遇到了很多麻烦 过滤器的网页显示: sylfilter ~/Mail/inbox/1234 例如,对消息进行分类 返回值如下所示: 0垃圾邮件(垃圾邮件) 1清洁(非垃圾邮件) 2不确定 127其他错误 我一直试图将sylfilter与procmail结合起来,但没有取得多大成功。与其他一些垃圾邮件工具(如bogofilter)相比

我已经使用sylfilter一年多了(可以从中获得),它作为一个过滤工具非常有效(没有投诉)。然而,我一直在尝试将procmail与sylfilter一起使用,但是遇到了很多麻烦

过滤器的网页显示:

sylfilter ~/Mail/inbox/1234
例如,对消息进行分类

返回值如下所示:

0垃圾邮件(垃圾邮件)

1清洁(非垃圾邮件)

2不确定

127其他错误

我一直试图将sylfilter与procmail结合起来,但没有取得多大成功。与其他一些垃圾邮件工具(如bogofilter)相比,最大的问题是sylfilter不会对电子邮件本身进行任何更改 (与bogofilter不同,bogofilter的例子在网络上比比皆是 在消息头中放入一个X-Bogosity字段)。我什么都想要 这被归类为垃圾邮件,可以转到$HOME/邮件/垃圾邮件以及所有 不会进一步分类到诸如procmail规则之类的文件夹中。 也许返回2的内容可以转到$HOME/Mail/Undefinable

以下是我根据Fedora邮件列表中的建议所做的最新尝试

:0 Wc
| /usr/bin/sylfilter /dev/stdin
:0 a
$HOME/Mail/Junk/.
但是,这不会使用sylfilter(和)处理电子邮件 在继续处理另一个日志文件之前,日志文件显示“无输入文件”
规则)。所以,我想知道这里是否有人知道类似的情况,并且知道这个问题的答案。

我不熟悉
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
的路径。如果它位于非标准位置,请修改
.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终止时运行;完成后,这将负责清理临时文件。因为我们将是此文件的唯一写入者,所以在将消息副本写入此文件时,我们不关心锁定


有关详细的语法细节,请参见

Hi,谢谢!我还认为sylfilter可能无法处理标准输入的消息。因此,接下来的问题是:是否可以临时将副本馈送到文件中,在此文件上使用sylfilter,然后继续处理结果(如您所建议的),谢谢您的编辑!我现在已经证实了这一点。对此我非常感激。如果你有时间,我想知道这个食谱背后的细节!再次感谢!!再编辑一些。祝你好运!请考虑一下。谢谢