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

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

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

我想定期执行此操作,因此每天它都会执行我手动输入的操作mutt -f alerts; D; [email protected]; $; y (purge)

.procmailrc不是一个选择,因为我必须首先浏览它们。一旦我浏览了一下,它们就很好了。本周末不再需要它们,并希望将它们移除。

答案1

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

0 0 * * * script >/dev/null -c 'env TERM=vt100 mutt -F/dev/null -falerts -e "push <delete-pattern>[email protected]<enter><sync-mailbox>y<enter><exit>"' /dev/null

让我们来分解一下。

script -c 'cmd'cmd在假伪 tty (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>[email protected]<enter>相当于按键[email protected]加 ENTER,但它使用键盘绑定符号而不是实际的按键。这是宏和推送的最佳实践,因为它可以使您的脚本免受默认或个人键绑定更改的影响。您可以从交互式帮助中获取按键绑定符号。中间列中的所有名称(与语句一起使用bind)都是符号名称。

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

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

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

答案2

您可以使用with (或许多其他语言中的许多实现之一)mutt来执行此操作。cronexpect

#!/usr/bin/env expect
spawn mutt -f alerts
expect -ex "Mutt" # or something if you've customized the display
send -- "D"
send -- "[email protected]"
...

另一种选择是编写代码,通过类似的方式执行类似的操作邮件::邮箱::Mbox

相关内容