下载 POP3 电子邮件时 PC 崩溃。那些邮件没了?

joh*_*mpf 1 email crash thunderbird pop3

Thunderbird 正在从配置为 POP3 的帐户下载过去 15 小时内收到的 35 封电子邮件。

PC在中间崩溃。

重新启动后,Thunderbird 在本地没有这些新电子邮件。它认为它已经完成了。它不会重新下载它们。

从那以后,它重新下载新收到的电子邮件就好了。

我已将帐户设置为不在服务器上留言。

而且,果然,服务器(Comcast,通过网络邮件检查)没有电子邮件。收件箱是空的。

似乎应该有一些互锁,例如,邮件服务器等待邮件客户端确认电子邮件消息的下载,然后才删除该消息。

相反,邮件服务器似乎收到了 POP 请求,将所有电子邮件放入下载队列,并从收件箱中删除邮件,无论客户端是否成功下载。

我请你在我的推理中找到一个缺陷,希望这些丢失的电子邮件能在我可以找回的地方找到。

编辑:这是在 Windows 7 桌面上,A/C 壁式电源。

use*_*686 5

似乎应该有一些互锁,例如,邮件服务器等待邮件客户端确认电子邮件消息的下载,然后才删除该消息。

在标准 POP3 服务器中,删除确实是一个单独的命令。首先客户端发送RETR它想要下载的每个消息 UID,然后它发送DELE它想要删除的每个消息 UID。(下载发生在同一连接上。)

(对于某些客户端,它是“RETR 1,RETR 2,RETR 3... DELE 1,DELE 2,DELE 3...”,对于其他客户端,它是“RETR 1,DELE 1,RETR 2,DELE 2,RETR 3, DELE 3...”,但这并没有真正改变 DELE 仍然是检索后发生的单独命令的事实。)

如果 POP3 服务器本身在检索后删除邮件,这不是标准的 POP3 行为。


也就是说,客户端可能一次发送了一批命令(RETR+DELE),而实际上没有等待每个先前的消息完成下载,这肯定是客户端的设计缺陷。

但更有可能的是,客户端确实成功下载了这些消息并将它们保存到文件系统——但操作系统在崩溃时实际上还没有将挂起的更新写入磁盘。

不幸的是,这是一个常见的问题,有时崩溃后只有几秒钟的数据丢失,在其他情况下可能需要几分钟。(这取决于OS,在文件系统中,它是否是AC-或电池供电的,并且在该程序是否手动请求的数据同步或不1)。


1为什么程序在将重要数据写入磁盘时使用 fsync()?可能是懒惰,或者可能是(至少在 Linux 上)同步操作对于日常使用来说太慢了。

  • 写入几乎总是首先缓存在内存中,然后进行排序并一次性(每隔几分钟)发送到磁盘。这是正常行为。 (2认同)