Fetchmail 保留原始日期/时间

Fetchmail 保留原始日期/时间

我正在设置自己的 IMAP,并且需要在自己的服务器中收集过去 9 年收到的电子邮件(并从几个电子邮箱中持续同步)。

我已成功在空邮箱上设置了 fetchmail 测试账户。每当我向目标邮箱发送邮件时,邮件都会通过 POP3 被接收至我的邮箱。 我发现我发送到 Windows Mail 的消息显示了fetchmail发送的日期/时间。这对于新邮件来说可能合适,但对于历史记录跟踪来说却不合适。

我的.fetchmailrc文件现在* 显示

set invisible

poll pop.fastwebnet.it proto imap
        user "redacted" pass "redacted" fetchall
        mda "/usr/lib/dovecot/deliver"

我的收件箱使用 Postfix 和 Dovecot 格式配置Maildir。我为 fetchmail 选择了 POP3,因为它会在同步到 maildir 后删除邮件。

我如何知道fetchmail放入 Maildir 的新邮件必须与服务器上找到的完全匹配,参考日期和时间

我的意思是,如果我去同步我[email protected]累积的 9 年邮件的历史记录,所有邮件的日期都会是今天!

例如,我在 14:59 左右给自己发了一封测试邮件[email protected],在 开启了网络邮件fastwebnet.it以确认 14:59 是“官方”时间,然后fetchmail在 15:30 从我的服务器运行。Windows Mail 显示该邮件的时间为 15:30,而不是 14:59。

更新

从评论和阅读文档中可以清楚地看出,fetchmail 通常会Received在电子邮件顶部添加标题,以便客户端能够检测到邮件是全新的。

我也运行fetchmail了详细模式,这次使用的是 IMAP。似乎默认情况下它通过 SMTP 投递邮件,所以问题就出在这里。如果我的服务器通过 SMTP 收到一封要投递到 Maildir 的邮件,它会认为这封邮件是全新的。

*我已更新了原文中的问题

答案1

看来 Windows Mail 向用户显示的日期不是来自Date标题字段,而是来自最新Received字段(Received字段主要用于通过传递网关跟踪消息,如RFC5321RFC5322)。

当 fetchmail 传递消息时,即使选择了该mda选项(不使用 SMTP),它也会默认添加自己的Received字段,其中包含当前日期和时间。

幸运的是,它提供了一个禁用此功能的选项:

- 无形的选项(关键字:set invisible)试图使 fetchmail 不可见。通常,fetchmail 的行为与任何其他 MTA 一样 - 它会在每封邮件中生成一个 Received 标头,描述其在传输链中的位置,并告诉它转发到的 MTA 该邮件来自运行 fetchmail 本身的机器。如果启用了 invisible 选项,则 Received 标头将被抑制,fetchmail 会试图欺骗它转发到的 MTA,使其认为它直接来自邮件服务器主机。

我相信您希望将此选项与非 SMTP 传递相结合,例如--mda /usr/lib/dovecot/deliver。否则 SMTP 服务器可能会Received在 fetchmail 后添加自己的字段。

答案2

由于问题的范围是执行邮箱的“初始”历史迁移,因此有不同的brute force方法:将电子邮件从旧 IMAP 移动到新收件箱。从那时起,fetchmail 守护程序将与新的邮件

通过客户端(例如 Outlook)

同步两个邮箱,选择所有(或成组)电子邮件,然后将其拖放或剪切粘贴到新收件箱中。这将花费一些时间和手动工作,但不会造成任何损害或造成很小的损害,尤其是当您成组移动电子邮件时

通过转储

由于我可以访问服务器,因此可以使用以下工具imap2maildir可以将 IMAP 框转储到 Maildir 兼容框中。将原始 Maildir 与新 Maildir 合并可以正确初始化消息收集

通过任何其他特定的商业工具

有很多用于 IMAP 迁移/同步的工具。甚至还有在线工具,您必须向其提供您的邮箱密码(为了您的安全,您可以在迁移期间将密码更改为临时密码),并且您必须相信该服务不会保留您的个人数据。

相关内容