繁体   English   中英

在 procmail 中使用 sylfilter

[英]using sylfilter with procmail

我已经使用 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 处理电子邮件消息(并且在继续处理其他规则之前,日志文件会显示“无输入文件。”)。 所以,我想知道这里是否有人知道类似的案例并知道这个问题的答案。

我不熟悉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 ,您不需要硬编码sylfilter的路径。 如果它位于非标准位置,请修改.procmailrc开头的PATH ,而不是使用指向可执行文件的显式路径来乱扔代码。 所以如果它在/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM