昨晚我訂閱了一個郵件列表,今天早上發現我的 procmail 過濾器不適用於許多郵件列表訊息。現在,我的收件匣中散佈著大量不太重要的郵件清單訊息和更重要的工作電子郵件。
是否可以透過我的 procmail 過濾器重新運行收件匣中的所有電子郵件?
注意:我使用的是maildir格式
答案1
我相信這會起作用。您需要執行formail
重新格式化郵件並透過 發回procmail
。
從 Maildir 目錄:
cat * | formail -s procmail
答案2
您也許可以就地執行此操作,如下所示:
$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done
之後您必須刪除每封原始電子郵件,否則 procmail 會複製它。
它還會將一切記錄為新的。我不確定有什麼好方法來處理這個問題。
答案3
如果您使用的是 mutt,您可以透過 procmail 傳輸電子郵件,並使用如下所示的鍵盤命令從收件匣中刪除原始郵件:
muttrc:
macro index y '<enter-command>unset wait_key<enter><tag-prefix><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><tag-prefix><delete-message><enter-command>set wait_key<enter>'
macro pager y '<enter-command>unset wait_key<enter><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><delete-message><enter-command>set wait_key<enter>'
答案4
似乎沒有好的解決方案:procmail 似乎只接受來自 的郵件輸入stdin
,這限制了 maildir 應用程式。
我遇到了類似的情況,適合我需求的最佳解決方案就是簡單地複製我想做的事情procmail
,但它絕對不能做的事情,用我自己的小腳本,如果你只有一兩個簡單的規則,這應該就夠了你需要照顧的:
cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: [email protected]" cur/*`; \
do mv $i .FreeBSD.perforce/$i; done'
這也不是最佳的,但至少它不會遭受不必要的 IO 和潛在的資料遺失問題。