我正在设置自己的 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
字段主要用于通过传递网关跟踪消息,如RFC5321和RFC5322)。
当 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 迁移/同步的工具。甚至还有在线工具,您必须向其提供您的邮箱密码(为了您的安全,您可以在迁移期间将密码更改为临时密码),并且您必须相信该服务不会保留您的个人数据。