10

我对 procmail 有一个非常常见的要求,但我无法以某种方式获得结果。我有包含以下内容的 procmailrc 文件:

:0
* ^To.*@myhost
| /usr/bin/python /work/scripts/privilege_emails_forward.py

其中我的自定义python脚本(privilege_emails_forward.py)将扫描当前收到的电子邮件并对邮件内容进行一些操作。但是我无法让脚本在第一时间执行(更不用说扫描邮件内容了)。

  • 这是在新邮件到达后立即调用外部程序(python)的正确方法吗?
  • 我的 python 程序(privilege_emails_forward.py)如何接收邮件作为输入?我的意思是 sys.argv 或 stdin????
4

2 回答 2

11

这很好,只需放在( )fw之后。您的 python 程序将在. 您必须在 上“回显”可能已转换的邮件。:0:0 fwstdinstdout

fw方法:

  • f将管道视为过滤器。
  • w等待过滤器或程序完成并检查其退出代码(通常被忽略);如果过滤器不成功,则文本不会被过滤。

我的垃圾邮件检查器(bogofilter)就是这样工作的。它添加了标头,后来的 procmail-rules 会根据这些标头做一些事情。

于 2009-02-17T17:45:04.123 回答
5

日志摘录清楚地表明您的脚本已执行,即使它没有显示出预期的效果。如果执行失败,我希望 procmail 记录错误。

无论如何,请确保执行 procmail 的用户 (uid) 具有执行脚本的正确权限。仅当您使用类似这样的方法成功测试时才将脚本连接到 procmail(将“procmail”替换为正确的 uid):

# sudo -u procmail /bin/sh -c '/bin/cat /work/scripts/mail.txt | /usr/bin/python /work/scripts/privilege_emails_forward.py'

根据您的 sudo 配置,您必须以 root 身份运行它。哦,确保你使用绝对文件路径。

于 2009-02-18T14:01:22.093 回答