如何自动删除旧邮件列表电子邮件?

Grz*_*cki 5 scripting mutt

mutt我执行以下步骤序列:

$ mutt -f imaps://imap.example.com
username
password
[shift]+[D]
~C mailinglist1@domain.com
[shift]+[D]
~C mailinglist2@domain.com
(...)
[shift]+[D]
~C mailinglistN@domain.com

[shift]+[U]
~d<91d
q
y
Run Code Online (Sandbox Code Playgroud)

所以我 :

  • 提供凭据loginpassword
  • [shift]+[D] ~C mailinglist@domain选择删除邮件列表1 , 2 ... N
  • [shift]+[U] ~d<91d 但取消选择所有小于 91d 的旧
  • q 选择退出
  • y 并确认删除消息

如何自动化?(把它变成一个脚本)

mutt -e ...
Run Code Online (Sandbox Code Playgroud)

参考:

cas*_*cas 4

1. 认证

您可以在 URI 中指定用户名imaps://,并使用配置设置指定密码imap_pass

如果您不想将这些设置放入 default 中~/.muttrc,则可以创建一个别名或 shell 脚本包装器来使用mutt这些设置运行。例如

$ alias muttexample="mutt -f 'imaps://USERNAME@imap.example.com/' 
                          -e 'set imap_pass=PASSWORD'"
$ muttexample
Run Code Online (Sandbox Code Playgroud)

(添加换行和缩进只是为了提高可读性)

如果您非常谨慎并且不希望在命令行上使用密码(使用ps或 通过查看可以轻松看到/proc密码),那么您可以创建一个名为的文件,例如,~/.muttrc.extra包含以下两行:

source ~/.muttrc
set imap_pass=PASSWORD
Run Code Online (Sandbox Code Playgroud)

请记住运行chmod 600 ~/.muttrc.extra以使其只有您可读。

然后将您的别名设置为:

$ alias muttexample="mutt -f 'imaps://USERNAME@imap.example.com/' 
                          -F ~/.muttrc.extra"
Run Code Online (Sandbox Code Playgroud)

2. 自动删除

现在身份验证已经解决,自动删除消息的最简单方法可能是使用~/.muttrc.extra.

source ~/.muttrc
set imap_pass=PASSWORD

folder-hook imaps://USERNAME@imap.example.com/ push 'D~Cmailinglist1@domain.com<enter>D~Cmailinglist2@domain.com<enter>D~CmailinglistN@domain.com<enter>U~d<91d<enter>qy'
Run Code Online (Sandbox Code Playgroud)

您可能需要优化imaps://文件夹挂钩中的 URI - 我自己不使用 imap,所以我不知道USERNAME@文件夹挂钩中是否需要该部分。

如果该文件夹挂钩行变得太长且复杂而无法编辑或理解,您可以将命令保存在~/.muttrc.deletecmds

D~Cmailinglist1@domain.com
D~Cmailinglist2@domain.com
D~CmailinglistN@domain.com
U~d<91d
qy
Run Code Online (Sandbox Code Playgroud)

然后将其用于您的文件夹挂钩:

folder-hook imaps://USERNAME@imap.example.com/ push `sed -z 's/\n/\<enter\>/g' ~/.muttrc.deletecmds`
Run Code Online (Sandbox Code Playgroud)

请注意,我们这次使用反引号而不是单引号~/.muttrc.extra,以使muttcall 成为外部命令。

sed命令将每个换行符 ( \n) 替换为原义文本<enter>。它使用该-z选项,因此sed需要 GNU。如果您没有 GNU sed,您可以使用perlawk代替。

顺便说一句,我建议在邮箱的本地副本上进行测试(调整邮箱和文件夹挂钩线等以指向本地文件而不是 imap)。如果您手边没有任何本地邮件,请将 imap 邮箱中的部分或全部消息保存到本地 mbox 文件。

另外,我会qy在文件夹挂钩行(或文件中~/.muttrc.deletecmds)没有最后一个的情况下进行测试。 mutt不会自动退出,因此您需要手动检查它是否完全按照您的要求进行操作,仅此而已。%此外,您还可以通过键入然后退出来禁用将更改写入磁盘qy,这样您就不必再次填充测试邮箱。


3. 有更好的方法可以做到这一点

mutt确实不是适合这项工作的工具。

您是否考虑过perl使用Net::IMAP::Simple模块来执行此操作?或者许多 其他模块 之一perl用于处理 IMAP 和电子邮件(例如Email::Simple)?

如果你不喜欢perlpython这是一个很好的imaplib2模块。