2014-01-26 42 views
1

我已經使用sylfilter超過一年了(它可從http://sylpheed.sraoss.jp/sylfilter/),它作爲一個過濾工具(沒有投訴)很好。但是,我一直試圖在sylfilter上使用procmail,但一直有很多麻煩。使用sylfilter procmail

該網頁的過濾器顯示:

sylfilter ~/Mail/inbox/1234 

作爲對消息進行分類的示例。

的返回值如下:

0垃圾(垃圾郵件)

1清潔(非垃圾郵件)

2不確定

127其他錯誤

我有一直試圖將sylfilter與procmail結合起來,但並沒有取得太大的成功。最大的問題與像bogofilter其他一些垃圾郵件工具相比是sylfilter不會對電子郵件消息本身 任何更改(不像bogofilter,爲此例子比比皆是在網絡上,並 放在一個X-Bogosity場在消息頭中)。我希望歸類爲垃圾的所有東西 轉到$ HOME/Mail/Junk,並且所有 不會被進一步分類爲procmail規則等文件夾。 也許返回2的東西可以去$ HOME/Mail /不確定。

這是我最近嘗試基於Fedora郵件列表中提出的建議。

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

然而,這並不能(在繼續之前處理其他 規則和 日誌文件說:「沒有輸入文件。」)處理使用電子郵件sylfilter。所以,我想知道這裏有沒有人知道類似的情況,並知道這個問題的答案。

回答

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。如果它位於非標準位置,請在.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命令創建一個唯一的臨時文件。當Procmail終止時,TRAP賦值設置一個命令序列以運行;當我們完成時,這需要清理臨時文件。因爲我們將是該文件的唯一編寫者,所以我們不會在寫入郵件副本的同時鎖定該文件。

欲瞭解更多事實真相語法的詳細信息,也看到http://porkmail.org/era/procmail/quickref.html

+0

嗨, 謝謝!我也認爲sylfilter可能無法處理標準輸入信息。那麼問題是:是否有可能將副本臨時饋入文件,在此文件上使用sylfilter,然後繼續前進(如你所建議的那樣)? – user3236841

+0

請參閱編輯。希望這可以幫助。 – tripleee

+0

感謝您的編輯!我現在已經驗證了這一點。我非常感謝這一點。如果你有一些時間,我想知道這個食譜背後的細節!再次感謝!! – user3236841

相關問題