Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email IMAP-如何在对话线程中搜索所有消息?_Email_Search_Imap - Fatal编程技术网

Email IMAP-如何在对话线程中搜索所有消息?

Email IMAP-如何在对话线程中搜索所有消息?,email,search,imap,Email,Search,Imap,我正在使用IMAP客户端,希望能够找到对话线程中引用的所有消息的列表 我知道“References”标题包含对话中引用的消息列表,因此我尝试这样搜索: TAG1 UID SEARCH all HEADER References "<CAOZnC-Nr+Q+bS_Nn5XiZ6A-kw=ZRBYrNbdoRfgZ65OjGA4_BKg@mail.gmail.com>" TAG1 UID搜索所有标题引用“” 但它什么也不返回。我已使用“message ID”标题成功搜索了一条消息,如

我正在使用IMAP客户端,希望能够找到对话线程中引用的所有消息的列表

我知道“References”标题包含对话中引用的消息列表,因此我尝试这样搜索:

TAG1 UID SEARCH all HEADER References "<CAOZnC-Nr+Q+bS_Nn5XiZ6A-kw=ZRBYrNbdoRfgZ65OjGA4_BKg@mail.gmail.com>"
TAG1 UID搜索所有标题引用“”
但它什么也不返回。我已使用“message ID”标题成功搜索了一条消息,如下所示:

TAG2 UID SEARCH all HEADER Message-ID "<918171f1-8822-4869-afb4-de76b05b850b@xtnvmta101.xt.local>"
TAG2 UID搜索所有标题消息ID“”
是否仍然可以使用IMAP 4执行此操作


注意:我知道搜索一次只能在一个邮箱上工作,但至少有一半的邮件在我搜索的目标文件夹中,并且它们不会显示在我的搜索结果中。

您的搜索查询是错误的--您应该从那里删除
ALL
标记--您发送的内容在语法上无效。正确的格式如下所示,例如:

1 UID SEARCH HEADER references "<CAOZnC-Nr+Q+bS_Nn5XiZ6A-kw=ZRBYrNbdoRfgZ65OjGA4_BKg@mail.gmail.com>"
事实上,我已经用Dovecot测试过了,它是有效的(并且已经工作了很多年)。请注意,Dovecot不支持
MESSAGEID
search键,而且
INTHREAD REFS
的语法与标准草案中的不同。不过,上面的命令是有效的

如果您需要在没有任何扩展的情况下工作,那么您似乎没有其他机会,只能:

  • 立即获取
    HEADER.FIELDS[回复中的消息Id引用]
    ,并在客户端分析消息
  • 每当您的
    搜索头引用
    返回一个新UID时,获取
    头.FIELDS[回复中的引用]
    ,从那里提取“新”消息ID,将它们添加到队列末尾并继续
最后,如果您主要针对GMail用户,您也可以使用GMail的
X-GM-THRID
,但请注意它们的实现相当有限,包括每个线程最多100条消息的硬限制、非标准线程关联等


好吧,选择你的毒药。

你的服务器支持线程扩展吗?是的,我相信我可以假设……我不知道任何细节,但在中定义的线程扩展可能会帮助你将消息关联在一起。事实证明,有些需要使用的客户端不支持线程扩展,因此,如果可能的话,我必须找到另一种方法。谢谢你的建议。谢谢你的反馈。。。。我在搜索引用时尝试了你的变体,但仍然没有收到任何其他邮件,即使我知道它们在同一邮箱中,并且在引用列表中包含我的目标邮件ID。。。但是这里有很多信息,我将进一步研究这些信息…看起来像是IMAP服务器中的一个bug。在Dovecot上试试这个,你可以控制一个邮箱(并通过
grep
验证邮件头是否匹配。我测试的邮件服务器是Gmail IMAP服务器……我没有机会在其他任何东西上测试它(合同工作)…感谢您的帮助!FWIW,原始查询是有效的,只是不是最优的。添加顶级“all”术语就像在c/c++/java if()中添加“true | |”。
1 UID SEARCH INTHREAD REFS HEADER Message-Id "something"