我有一个由 创建的邮箱文件(“Mboxrd”)getmail
,我想通过对来自各个(组)发件人的邮件进行排序来“处理”它,并将它们移动到单独的邮箱文件(我猜 3-5 个)现在)。理想情况下,应从原始邮箱文件中删除如此移动的邮件消息。
我很可能想按发件人地址对邮件进行分类 - 尽管能够按主题(即某些单词/短语)对其进行分类也很好......
现在,如果这是我的计算机 MTA 刚刚收到的邮件 - 或者如果我设置getmail
将邮件发送到 MTA - 我想我可以使用procmail
正常的方式......但是,我得到的是“死”文件已存储邮件消息,因此这不是一个选项。我想我可以通过 MTA 发送邮件,但肯定有一种方法可以按原样处理邮件(在文件中)?
那么,是否有一个程序或命令(或者一些特殊选项procmail
或类似命令)可以让我根据邮件的发件人/主题将邮箱文件中的邮件“排序”到其他几个邮箱文件中?一个小例子(例如配置文件)也将不胜感激......
答案1
该formail -s
方法通过演示脚本记录在procmail
手册页;寻找这个短语:
还可以调用 Procmail 对已填满的系统邮箱进行后处理。
您还会发现这个http://www.iki.fi/era/procmail/mini-faq.html#split
如果您的邮箱不是 Berkeley mbox 单个文件,则您可能有一个目录,其中每个文件都是单独的消息。在这种情况下,您可以简单地处理它
for f in folder/*; do
procmail -options <"$f"
# maybe rm "$f" to remove the original after processing completes
done
作为如何按发件人过滤的示例,一个简单的配方类似于
# If your mailbox destination is maildir, no locking is required
:0: # so you could lose the second colon here, and in subsequent examples
* ^From:.*\<alice@example\.com\>
alice
:0:
* ^From:.*\<bob@example\.net\>
bob
这会检查“发件人:”标头,这通常是人们所说的“发件人”的意思,尽管还有其他两个常用字段(信封发件人,通常位于 中Return-Path:
,实际Sender:
标头是可选的,但经常使用当From:
标头不是实际发送者时由发送软件填充)。
同样,要按 分类Subject:
,只需指定与您要捕获的主题相匹配的正则表达式。
:0:
* ^Subject: *((Fwd?|Re): *)*\[gunk]
gunk-list
将找到主题标头包含标签 的邮件[gunk]
,前面可以选择空格和/或Re:
和/或Fw:
和/或Fwd:
。
答案2
假设您的邮箱文件采用 mbox 格式,您可以使用formail
procmail 附带的实用程序对每封邮件运行命令,并可以-s
选择告诉它输入是一个邮箱而不仅仅是一封邮件。如果您想应用 procmail 规则,该命令可以是该命令procmail
,也可以是通过标准输入接收邮件并对其执行任何操作的任何其他命令。
formail -s procmail <Mboxrd && mv Mboxrd Mboxrd.done
另一种方法是在 mutt 中加载邮箱并应用一些宏。这样做的优点是与邮箱格式无关,但缺点是 mutt 宏可能很神秘(但不一定比 procmail 规则更神秘)。使用 mutt 的另一个优点是它一次可以移动一封邮件,因此如果中途中断,它可以从中断的地方恢复。