Thunderbird在哪里存储通过POP下载的最后一条消息的UID?

时间:2008-11-25 20:04:10

标签: pop3 thunderbird uidl

我使用Thunderbird接收使用POP3的电子邮件。我将Thurnderbird配置为在服务器上保留电子邮件。让我们说有一天我使用POP3检索(RETR)10封电子邮件,然后我退出当晚。隔夜再发10条消息发送到我的邮箱。当我第二天早上启动Thunderbird时,STAT命令应显示20条消息。但是,Thunderbird不应该下载前10条消息;它应该从消息11开始(或消息11的唯一标识符或UID)。 Thunderbird将发送POP3 UIDL命令,然后将UID与昨天检索到的最后一条消息Thunderbird的UID进行比较。它会发现最后一个UID与消息10的UIDL列表匹配,然后Thunderbird会RETR 11RETR 12,依此类推。

就我而言,POP3 STAT命令显示我在POP服务器上有5379条消息。我已经收到了大约5000个。出于某种原因,Thunderbird想要下载所有5379个消息,而不是从5001开始。我正在尝试调试它并且正在寻找Thunderbird认为是最后一条消息的UID。

有没有人知道Thunderbird(在Windows上)存储最后一个UID的位置,它将用于与UIDL(列表)进行比较?

有没有办法手动设置它以便我可以强制Thunderbird开始检索接近5001的地方?

4 个答案:

答案 0 :(得分:4)

Thunderbird有一个名为popstate.dat的文件,其中包含UID,时间戳(纪元)和标志。该标志表示Thunderbird要为相关消息执行的操作。

显然,Thunderbird实际上并没有像我上面描述的那样工作。我认为Thunderbird会做以下事情。它发送POP3 UIDL命令以获取存储在POP服务器上的UID列表。然后,它将此列表与存储在popstate.dat中的UID进行比较。任何尚未在popstate.dat中的UID都是要检索的新消息。 UIDL命令先前返回了消息号和关联的UID。然后,Thunderbird必须使用与尚未检索的UID相关联的消息编号执行POP3 RETR命令。 Thunderbird还必须查看popstate.dat中的标志,并对相关消息采取任何操作。例如,标志d告诉Thunderbird删除关联的消息。 f标志表示Thunderbird只有一个截断的部分消息,应该检索完整的消息。

在某些时候,Thunderbird会使用新消息更新popstate.dat。我认为这是在所有操作完成后批量更新到popstate.dat时发生的。也就是说,如果要检索10条新消息,则在检索到所有10条消息之前,popstate.dat不会更新。

我认为我的问题存在于服务器上。显然,我们的基础架构升级到新版本的POP服务器,并在新版本上分配了新的UID。我的popstate.dat拥有所有旧的UID。新POP服务器的UIDL会发送Thunderbird未在popstate.dat中列出的5000多个UID列表。因此,Thunderbird继续下载所有5000多条消息。如果新的POP服务器保留了旧的UID,那么Thunderbird会看到我已经检索了大部分5000多条消息,并且刚刚下载了我没有的消息。我认为我组织中的大多数人都使用Outlook而不使用POP3,但是对POP服务器进行的版本更新并没有给这些用户带来问题。似乎需要一些额外的注意,以确保新服务器具有与旧服务器相同的UID。生活和学习!

答案 1 :(得分:0)

有哪个版本的服务器软件?

http://courier.sourcearchive.com/documentation/0.60.0-2/pop3dserver_8c-source.html

  

00718 **消息的UIDL实际上只是文件名,直到第一个MDIRSEP字符

您可能需要将popstate.dat中的UIDL的第一部分替换为新的部分吗?

答案 2 :(得分:0)

Thunderbird有一个扩展程序可以找到重复项并删除它们。例如基于message-id(通常由邮件的原始发件人生成,因此未随基础结构更新而更改)。

答案 3 :(得分:0)

也许这不是 OP 正在寻找的答案,但它可能对他有帮助。 我遇到了类似的问题,为了解决这些问题,我创建了一个小的 php 脚本来重建 popstate 文件。 你可以在这里找到它:

https://github.com/Magentron/rebuild_thunderbird_popstate

<块引用>

用于重建 Thunderbird 的 popstate.dat 文件的简单 PHP 脚本。主要是 当 Thunderbird 崩溃和开始检索所有消息后很有用 已保存在邮件服务器上。将生成的默认文件 是 popstate.dat.GENERATED。如果您将其更改为 popstate.dat 文件 适当的 Thunderbird 目录,请确保 Thunderbird 是 关闭,否则您可能会遇到更多问题。

请注意,我们并未尝试将其设为我曾经使用过的最好的代码 写...

注意:有 Windows 支持,但从未测试过!

用法

usage: rebuild_popstate.php [-d] [-i n] [-s] [-v] [-f file] server [ port ]
    -c      CRLF flag, use when talking to Windows servers
    -d      debug flag
    -f      output filename (if popstate.dat, Thunderbird needs to be closed!)
    -i      ignore the last n messages (for if you don't have them yet)
    -s      use for secure POP3 (SSL/TLS)
    -v      verbose flag