我使用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 11
,RETR 12
,依此类推。
就我而言,POP3 STAT
命令显示我在POP服务器上有5379条消息。我已经收到了大约5000个。出于某种原因,Thunderbird想要下载所有5379个消息,而不是从5001开始。我正在尝试调试它并且正在寻找Thunderbird认为是最后一条消息的UID。
有没有人知道Thunderbird(在Windows上)存储最后一个UID的位置,它将用于与UIDL(列表)进行比较?
有没有办法手动设置它以便我可以强制Thunderbird开始检索接近5001的地方?
答案 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