使用脚本从 mbox 文件中删除选定电子邮件的最佳方法

Sti*_*ley 5 scripting email mutt

我有一个 mbox 格式的任意电子邮件文件。我想定期(周末),并自动(通过 cron)从我的“警报”mbox 文件(新文件夹)中清除来自一个发件人(或具有特定主题)的消息,因为一个发件人让我们称之为“ syscheck@example.com' 每天发送数十条消息。

我想cron这个所以每天它会做我手动输入的 mutt -f alerts; D; syscheck@example.com; $; y (purge)

.procmailrc不是一个选择,因为我必须首先浏览它们。一旦我略过它们就可以了。在一周结束时,不再需要它们,并希望将它们移除。

dgc*_*dgc 4

这个 cron 作业每天午夜执行您指定的操作:

0 0 * * * script >/dev/null -c 'env TERM=vt100 mutt -F/dev/null -falerts -e "push <delete-pattern>syscheck@example.com<enter><sync-mailbox>y<enter><exit>"' /dev/null
Run Code Online (Sandbox Code Playgroud)

让我们来分解一下。

script -c 'cmd'cmd在假伪终端(pty)下运行,因此cmd 认为它有一个具有光标移动性等的终端。Mutt 需要这个,但你的 cron 作业不能拥有它。脚本提供垫片。脚本的通常工作是将命令会话记录到文件中。它的最后一个参数/dev/null表示将记录写入空设备,因为您可能不关心一堆可重播的诅咒事件。

env TERM=vt100... 表示在运行 mutt 之前将 vt100 终端放入环境中。您需要这个,因为 cron 作业没有自然的终端类型(因为它们自然没有终端)。

其他一切都是 mutt 的一部分。我们用它-F/dev/null来确保您的内容.muttrc不被阅读。阅读它并没有什么问题,但是 muttrc 中的更改可能会改变 mutt 交互的方式。从长远来看,仅使用默认的 muttrc 更安全,事实也确实如此-F/dev/null

-e选项告诉 mutt 在运行时要做什么。其参数-e是可以放入 muttrc 文件中的命令:setalternativesbindhdr_orderPush是将击键“推入”键盘缓冲区的命令,以便 mutt 解释接下来的内容,就好像您已经键入了它一样。

现在让我们看看虚拟按键。

<delete-pattern>syscheck@example.com<enter>相当于按键Dsyscheck@example.com加 ENTER,但它使用键盘绑定符号而不是实际的按键。这是宏和推送的最佳实践,因为它可以使您的脚本免受默认或个人键绑定更改的影响。您可以从交互式帮助中获取按键绑定符号。中间列中的所有名称(与语句一起使用bind)都是符号名称。

<sync-mailbox>相当于$再次按 键符号而不是按键。 y<enter>回应“你确定吗?” 迅速的。

终于,<exit>放弃了。这也会终止您的script会话,并且您的 cron 命令结束。与 cron 一样,它>/dev/null可以防止 cron 的任何噪音骚扰您的邮箱。

请注意,整个push字符串都被引用了!这很重要。幸运的是,我们只需要两层引用,因此我们可以在单引号内使用双引号,而不会出现任何可笑的引号转义。