Imap4 客户端命令 LSUB

Imap4 client command LSUB

我对 function TIdIMAP4.ListSubscribedMailBoxes(AMailBoxList: TStrings): Boolean; 这个实现有疑问:

function TIdIMAP4.ListSubscribedMailBoxes(AMailBoxList: TStrings): Boolean;
begin
  {CC2: This is one of the few cases where the server can return only "OK     completed"
  meaning that the user has no subscribed mailboxes.}   
    Result := False;
    CheckConnectionState([csAuthenticated, csSelected]);
    SendCmd(NewCmdCounter, IMAP4Commands[cmdLSub] + ' "" *',
      [IMAP4Commands[cmdList], IMAP4Commands[cmdLSub]]);   {Do not Localize}
    if LastCmdResult.Code = IMAP_OK then begin
      // ds - fixed bug # 506026
      ParseLSubResult(AMailBoxList, LastCmdResult.Text);
      Result := True;
    end;
end;

当我调试时,我看到 LastCmdResult.Text 字符串列表是空的,但是 LastCmdResult.FormattedReply 字符串列表包含我的电子邮件服务器上的所有文件夹(收件箱、已发送、垃圾箱...)。当我尝试使用 LastCmdResult.FormattedReply 计数或文本时,它立即丢失了数据并给出了 LastCmdResult.FormattedReply.Count=0LastCmdResult.FormattedReply.Text=''。所以我想知道是否有办法在 LastCmdResult.FormattedReply 中输入数据并获取我的电子邮件服务器文件夹,或者有其他方法可以解决我的问题?

I have a problem with function TIdIMAP4.ListSubscribedMailBoxes(AMailBoxList: TStrings): Boolean; with this implementation :

当我使用最新的 SVN 版本的 Indy 尝试时,对我来说工作正常。

When I debug I see that the LastCmdResult.Text stringlist is empty, but the LastCmdResult.FormattedReply stringlist has all folders on my email server (Inbox, Sent, Trash, ...).

当我运行它时,情况正好相反。 LastCmdResult.Text 包含预期的文本,而 LastCmdResult.FFormattedReply 是空的(注意我直接提到了 FFormattedReply 数据成员,见下文)。

When I tried to use LastCmdResult.FormattedReply count or text, it had immediately lost its data and gave LastCmdResult.FormattedReply.Count=0 and LastCmdResult.FormattedReply.Text=''.

这是设计使然。 FormattedReply 属性 旨在供客户端用来解析服务器回复,以便它可以填充 TIdReply 的 属性 值,并由服务器用于使用 TIdReply 的 属性 值生成新回复。因此,您无法从客户端读取 FormattedReply 属性。

So I'd like to know if there is a way to enter the data inside LastCmdResult.FormattedReply and get my email server folders or there is another way to solve my problem ?

ListSubscribedMailBoxes() 的全部目的是 return AMailBoxList 参数中的文件夹名称。如果这对您不起作用,那么

  1. 您正在使用 older/buggy 版本的 Indy。

  2. 您的服务器正在以 TIdIMAP4 无法解析的格式发送数据。

如果不知道您实际使用的是哪个版本的 Indy,或者服务器的回复数据实际上是什么样子,就无法以任何一种方式诊断您的问题。