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
内输入数据并获取我的电子邮件服务器文件夹,还是有另一种方法可以解决我的问题?
答案 0 :(得分:2)
我的函数
TIdIMAP4.ListSubscribedMailBoxes(AMailBoxList: TStrings): Boolean;
存在问题:
当我使用最新的NVN版本的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,或者服务器的回复数据实际上是什么样子,则无法以某种方式诊断您的问题。