我有一个 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 文件中的命令:set
、alternatives
、bind
、hdr_order
等 Push
是将击键“推入”键盘缓冲区的命令,以便 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
来执行此操作。cron
expect
#!/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。