昨晚我订阅了一个邮件列表,今天早上发现我的 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 和潜在的数据丢失问题。