Delphi:Indy按关键字搜索邮箱(雷鸟标签)

Delphi:Indy按关键字搜索邮箱(雷鸟标签),delphi,imap,indy,Delphi,Imap,Indy,我正在尝试从IMAP获取邮件标签(由Thunderbird设置)。我找到了一些搜索邮箱的示例过程,但当我尝试通过关键字或标志进行搜索时,服务器断开连接。下面是我试图继续的代码。IMAP服务器-Dovecot,Indy版本10 IMAPClient.Connect; if IMAPClient.SelectMailBox('INBOX') then begin SetLength(SearchInfo, 1); SearchInfo[0].SearchKey := skkeyword; &

我正在尝试从IMAP获取邮件标签(由Thunderbird设置)。我找到了一些搜索邮箱的示例过程,但当我尝试通过关键字或标志进行搜索时,服务器断开连接。下面是我试图继续的代码。IMAP服务器-Dovecot,Indy版本10

IMAPClient.Connect;
if IMAPClient.SelectMailBox('INBOX') then
begin
  SetLength(SearchInfo, 1);
  SearchInfo[0].SearchKey := skkeyword; <<<
  SearchInfo[0].Text := edit1.Text;
  if IMAPClient.SearchMailBox(SearchInfo) then
  begin
    memo1.Lines.add(inttostr(High(IMAPClient.MailBox.SearchResult))+ '-result');
    for I := 0 to High(IMAPClient.MailBox.SearchResult) do
    begin
      MsgObject := TIdMessage.Create(nil);
      try
        if IMAPClient.Retrieve(IMAPClient.MailBox.SearchResult[I], MsgObject) then
        begin
          memo1.Lines.Add(  msgobject.MsgId);
        end;
      finally
        MsgObject.Free;
      end;
    end;
  end;
end;
IMAPClient.Connect;
如果IMAPClient.SelectMailBox(“收件箱”),则
开始
SetLength(SearchInfo,1);

SearchInfo[0]。SearchKey:=skkeyword;您是否在其他PC或其他邮件客户端上看到这些关键字?它们实际上存储在服务器端吗?当我从其他PC登录时,它会导入标签,所以我认为(和文档确认)标签存储在服务器端。关于地址,一切似乎都合乎逻辑,所以我认为我使用了错误的印第方法。有什么想法吗?使用数据包嗅探器(Wireshark)检查通信,并找到服务器断开连接之前的最后一次交互。除非IMAP服务器实际支持客户端创建的关键字(如
选择
响应的
PERMANENTFLAGS
字段中的
\*
值所示),然后,像Dovecot和Thunderbird这样的系统使用自己的定制机制来存储服务器之外的标签/关键字。即使标签存储在服务器端,
TIdIMAP
也没有实际检索它们的机制(只搜索包含它们的消息),因为它们将被存储为标志,Indy只支持预定义标志的一小部分(除非IMAP服务器是Gmail,它对.也就是说,单个
skKeyword
不能同时搜索多个标签。每个标签在数组中都需要自己的
skKeyword
条目。但是,一次搜索多个项目会执行
操作,只返回符合所有指定条件的电子邮件。对于多个标签,它只会找到包含所有标签的电子邮件。如果您需要查找包含任何标签但不一定包含所有标签的电子邮件,您必须多次调用
SearchMailBox()
,每个标签一次,然后将结果合并在一起,丢弃任何重复项。您是否在其他PC或其他邮件客户端上看到这些关键字?它们实际上存储在服务器端吗?当我从其他PC登录时,它会导入标签,所以我认为(和文档确认)标签存储在服务器端。关于地址,一切似乎都合乎逻辑,所以我认为我使用了错误的印第方法。有什么想法吗?使用数据包嗅探器(Wireshark)检查通信,并找到服务器断开连接之前的最后一次交互。除非IMAP服务器实际支持客户端创建的关键字(如
选择
响应的
PERMANENTFLAGS
字段中的
\*
值所示),然后,像Dovecot和Thunderbird这样的系统使用自己的定制机制来存储服务器之外的标签/关键字。即使标签存储在服务器端,
TIdIMAP
也没有实际检索它们的机制(只搜索包含它们的消息),因为它们将被存储为标志,Indy只支持预定义标志的一小部分(除非IMAP服务器是Gmail,它对.也就是说,单个
skKeyword
不能同时搜索多个标签。每个标签在数组中都需要自己的
skKeyword
条目。但是,一次搜索多个项目会执行
操作,只返回符合所有指定条件的电子邮件。对于多个标签,它只会找到包含所有标签的电子邮件。如果您需要查找包含任何标签但不一定包含所有标签的电子邮件,则必须多次调用
SearchMailBox()
,每个标签一次,然后将结果合并在一起,丢弃任何重复项。