我对此实现的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=0
和LastCmdResult.FormattedReply.Text=''
。所以我想知道是否有一种方法可以在LastCmdResult.FormattedReply
中输入数据并获取我的电子邮件服务器文件夹,或者还有另一种方法可以解决我的问题? 最佳答案
我对此实现的功能TIdIMAP4.ListSubscribedMailBoxes(AMailBoxList: TStrings): Boolean;
有问题:
当我使用最新的SVN版本的Indy尝试时,对我来说效果很好。
调试时,我看到LastCmdResult.Text
字符串列表为空,但是LastCmdResult.FormattedReply
字符串列表具有我的电子邮件服务器上的所有文件夹(收件箱,已发送,已删除邮件,...)。
当我运行它时,情况恰恰相反。 LastCmdResult.Text
包含预期的文本,并且LastCmdResult.FFormattedReply
为空(请注意,我直接提到了FFormattedReply
数据成员,请参见下文)。
当我尝试使用LastCmdResult.FormattedReply
计数或文本时,它立即丢失了数据并给出了LastCmdResult.FormattedReply.Count=0
和LastCmdResult.FormattedReply.Text=''
。
那是设计使然。客户端可以使用FormattedReply
属性来解析服务器回复,以便可以填充TIdReply
的属性值,并可以由服务器使用TIdReply的属性值来生成新的回复。因此,您无法从客户端的FormattedReply
属性读取。
所以我想知道是否有一种方法可以在LastCmdResult.FormattedReply
中输入数据并获取我的电子邮件服务器文件夹,或者还有另一种方法可以解决我的问题?ListSubscribedMailBoxes()
的全部目的是在AMailBoxList
参数中返回文件夹名称。如果那对您不起作用,那么
您使用的是Indy的旧版/越野车版本。
您的服务器正在以TIdIMAP4无法解析的格式发送数据。
如果不知道您实际使用的是Indy的哪个版本,或者服务器的回复数据的实际外观,就无法以一种或另一种方式诊断您的问题。