【问题标题】:procmail: getting procmail to exclude hostname while saving Maildir format messagesprocmail:在保存 Maildir 格式消息时让 procmail 排除主机名
【发布时间】:2021-01-31 13:37:01
【问题描述】:

如何让 procmail 将邮件保存在我的 Maildir 文件夹中,但不包括文件中的主机名(邮件名称)?我在我的新/子文件夹中收到以下消息名称:

  1464003587.H805375P95754.gator3018.hostgator.com, S=20238_2

我只想删除主机名。使用procmail可以做到吗?如何?另外,是否可以将第一个时间戳替换为 time-sent 时间戳?是否可以规定 procmail 的格式?

【问题讨论】:

    标签: procmail maildir


    【解决方案1】:

    不,您不能覆盖 Maildir 的文件名格式,尤其是因为出于互操作性原因,它被规定为采用特定方式。当多个主机上的多个代理同时写入同一个消息存储时,该格式保证能够抵抗冲突。只有当他们都按照相同的规则玩时,这才能正常工作。这些规则的一个明显部分是规定运行代理的主机名必须包含在每条新消息的文件名中。

    Wikipedia Maildir article 很好地概述了该格式的设计和历史,当然还有权威标准和其他主要来源的链接。

    如果您不是特别需要 Maildir 兼容性(与 tmp / new / cur 子目录等),您可以在每次运行时简单地创建一个唯一的 mbox 文件;如果你能保证它是唯一的,你写的时候就不需要加锁了。

    例如,如果您有一个名为 uuid 的工具,它会在每次调用时生成一个有保证的唯一标识符,您可以轻松地将其用作文件名;

    :0  # or maybe :0r
    `uuid`
    

    如果您真的认为可以创建自己的并发交付解决方案,那么应该很容易了解如何提供您自己的工具。 (Maildir 解决并发和分布式交付,因此要求更严格。)

    Procmail 支持的其他格式对于如何生成文件名有其自己的硬编码规则,但也许简单的 MH 文件夹格式(以(基本上是连续递增的)消息编号作为文件名)也值得研究。 The old mini-FAQ 简要概述了支持的格式以及如何在每个单独的配方中选择一个 Procmail 用于交付。

    【讨论】:

    • 谢谢!编辑询问我是否可以使用通用 localhost.localdomain。另外,MH 文件夹的 .mh_sequence 中有什么?我发现很难找到这个答案。
    • 我猜是序号;我认为没有人再使用 MH 了。在收到答案后编辑问题不是好的形式;我猜你必须使用 LD_PRELOAD 来重定向 Procmail 用来获取主机名的任何系统调用。
    • 哦,很抱歉:我注意到大多数人都这样做,所以我认为这是要走的路。我在哪里设置 LD_PRELOAD 以仅与 procmail(也许还有 mutt)一起使用?此外,如果您编辑答案以包含附加信息,也许更多人会更容易受益。 (无论如何我都会接受)。再次感谢!
    • 使用 LD_PRELOAD 覆盖系统调用需要您编写自己的 C 程序来覆盖系统调用,因此它明显超出了与 Procmail 相关的任何内容本身。我相信fakeroot作者写了一篇关于这项技术的介绍,但那是很多年前的事了;快速谷歌搜索让我在catonmat.net/simple-ld-preload-tutorial得到一个新的教程@
    • 非常感谢!有趣的文章,非常有帮助。所以,我应该在 C 中编写一个包装器来设置 LD_PRELOAD 然后调用 procmail 也许?我会再考虑一下。或者也许MH是我要解决的问题。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多