![使用电子邮件客户端在电子邮件服务器之间传输时保留电子邮件时间戳](https://linux22.com/image/630975/%E4%BD%BF%E7%94%A8%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%9C%A8%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E4%BC%A0%E8%BE%93%E6%97%B6%E4%BF%9D%E7%95%99%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%97%B6%E9%97%B4%E6%88%B3.png)
我使用 Postfix 和 Dovecot 运行两个不同的电子邮件服务器。我的一些用户在两个服务器上都有帐户,有时通过他们的电子邮件客户端将电子邮件从一台服务器传输到另一台服务器。当他们这样做时,电子邮件会显示在新服务器上,并带有传输时的时间戳,而不是原始时间。
我认为这是因为电子邮件像新邮件一样返回到 Postfix 队列。有没有办法让它保留原始时间戳?
这是使用 IMAP,并且电子邮件以 Maildir 格式存储在两个服务器上。
答案1
这是一个 Perl 脚本,将文件日期设置为邮件头中 Date: 行中的值。 http://www.athensfbc.com/public/fix_msg_dates
用法:fix_msg_dates.pl <消息目录路径>
-里克
答案2
您是否将 Maildir 存储与 IMAP 结合使用?如果是,则应该可以将邮件移动到新文件夹中。还应该可以使用邮件客户端在两个 IMAP 文件夹之间进行复制。
邮件中必须有日期标头,因为这通常是首选日期。有些客户会更喜欢使用交货日期。如果其他方法都失败了,他们可能会使用邮件出现在文件夹中的日期。只要邮件中有日期标头,日期就应该保持不变。
两个服务器之间的电子邮件通信会将消息重新注入邮件流,并导致日期标头被替换。
编辑:我使用 Dovecot 和 Thuderbird 的经验表明,只要存在日期标头,使用 IMAP 移动文件时日期就不会改变。如果不存在日期标头,则日期将设置为文件在 Thunderbird 中显示的日期。IMap 内部日期值在 RFC-3501 Internet 消息访问协议第 2.3.3 节中指定。根据我对 RFC 的阅读,我预计 Delivery-date 标头是重要标头。
如果您使用 IMap 移动文件,Postfix 就无关紧要,因为它不参与其中。仅当邮件在服务器之间邮寄时,Postfix 才会参与其中。
答案3
我在这里找到了答案:http://www.dovecot.org/list/dovecot/2008-July/032165.html
当将电子邮件从一台服务器传输到另一台服务器时,IMAP 客户端必须使用APPEND 命令。此命令有一个可选的日期参数,用于将“内部”或“已接收”传达给新服务器。但是,这是一个可选参数,客户端不需要发送它,如果省略,规范规定它应该默认为当前时间。这就是我的情况,邮件客户端没有报告原始内部时间。
讨论还澄清了 Dovecot 使用文件上的时间戳来报告内部时间。因此,如果我想事后更正接收时间,我可以设置文件上的时间戳,然后删除缓存文件。