2009-02-17 29 views
10

我對procmail有一個相當常見的要求,但我無法以某種方式得到結果。我有這個內容procmailrc文件文件:想要procmail運行一個自定義的python腳本,每次出現一個新的郵件

: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?

回答

11

這樣就好,只要在:0:0 fw)後面加上fw即可。您的python程序將收到stdin上的郵件。您必須在stdout上「回覆」可能轉換的郵件。

fw指:

  • f考慮管作爲過濾器。
  • w等待過濾器或程序完成並檢查其出口代碼(通常忽略);如果過濾器不成功,那麼文本將不會被過濾。

我的垃圾郵件檢查器(bogofilter)就是這樣工作的。它添加了頭文件,後來procmail-rules根據這些頭文件做了一些事情。

+0

我也試過。但仍然不起作用我不知道爲什麼:(這是我的procmailrc腳本: :0 fw * ^To.*@myhost |/usr/bin/python /work/scripts/privilege_emails_forward.py – 2009-02-17 18:23:06

+0

嘗試VERBOSE = yes,看看你的procmail日誌文件,也許你可以發現錯誤! – 2009-02-17 18:53:54

5

log excerpt明確指出您的腳本已執行,即使它沒有顯示所需的效果。如果執行失敗,我希望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配置,你必須運行此爲根。哦,並確保您使用絕對文件路徑。

相關問題