问题描述
如何获取procmail来将邮件保存在Maildir文件夹中,但不将主机名包含在文件中(邮件名)?我的新子文件夹中有以下消息名称:
1464003587.H805375P95754.gator3018.hostgator.com,S=20238_2
我只想删除主机名。使用procmail可以做到吗?怎么样?另外,可以用发送的时间戳替换第一个时间戳吗?可以规定procmail的格式吗?
解决方法
否,您不能覆盖Maildir的文件名格式,尤其是因为出于互操作性原因,它被指定为采用特定方式。当多个主机上的多个代理程序同时写入同一消息存储库时,该格式可以确保避免冲突。如果它们都遵循相同的规则,这才可以正常工作。这些规则中很明显的一部分是,该规则规定必须将代理运行所在的主机名包含在每条新消息的文件名中。
Wikipedia Maildir article很好地概述了格式的设计和历史,当然还链接了权威标准和其他主要来源。
如果您不是特别需要Maildir兼容性(带有tmp
/ new
/ cur
子目录等),则可以在每次运行时简单地创建唯一的mbox
文件;如果可以保证它是唯一的,则在写入时不需要锁定。
例如,如果您有一个名为uuid
的工具,该工具可在每次调用时生成保证的唯一标识符,则可以轻松地将其用作文件名;
:0 # or maybe :0r
`uuid`
如果您确实认为可以创建自己的并发交付解决方案,那么应该很容易看到如何提供自己的工具。 (Maildir解决了同时发送和分布式的问题,因此要求更为严格。)
Procmail支持的其他格式对于如何生成文件名也有自己的硬编码规则,尽管也许也应该研究简单的MH文件夹格式,并以(基本上是连续递增的)消息号作为文件名。 The old mini-FAQ简要概述了受支持的格式,以及如何选择Procmail在每个食谱中使用哪种格式进行传递。