TIdIMAP4.ListMailBoxes 中的错误?

Bug in TIdIMAP4.ListMailBoxes?

当我在客户端的 Lotus Notes 服务器上执行此命令时,返回的行如下所示:

* LIST (\HasNoChildren) "\" Folder\Subfolder 1
* LIST (\HasNoChildren) "\" Folder\Subfolder 2

在结果列表中,这存储为:

[0] LIST
[1] \HasNoChildren
[2] \
[3] Folder\Subfolder
[4] 1

当我把它放在 TreeView 中时,我最终得到:

- 1
|
- 2
|
- Folder
  |
  - Subfolder

我的问题:

  1. 根据协议,IMAP 服务器的响应是否有效?

  2. 如何更改 Notes 配置以使其输出正确的数据(前提是客户愿意更改它)?

  3. 这是一个错误吗?

  4. 如果是这样,我该如何解决?

我看到有两个“失败”的程序:InternalParseListResultParseIntoBrackettedQuotedAndUnquotedParts

不应该ParseIntoBrackettedQuotedAndUnquotedParts简单地将分隔符后面的所有内容都视为文件夹路径吗?

InternalParseListResult 不检查索引 2 作为分隔符,而是取最后一个条目并取其第一个字符。在示例中,分隔符将变为 'F'。它还决定最后一个索引是文件夹名称,因此文件夹最终为“1”或“2”。它不应该从 LSlRetrieve[2] 中获取分隔符并将 LSlRetrieve[3] 和更高版本视为文件夹名称吗?

由于所有这些函数和过程都不是虚拟的,我无法创建后代来重新实现该行为。我可以更改 Indy 的代码并让它在下一次更新时恢复原状,所以我不想走那条路。

当我在我们的 MS Outlook 服务器上 运行 命令时,一切都按预期工作,因为 returns 行如下:

* LIST (\HasNoChildren) "." "INBOX.Folder.Subfolder 1"
* LIST (\HasNoChildren) "." "INBOX.Folder.Subfolder 2"

is the IMAP Server's response valid according to the protocol?

据我所知,是的。

how can I change the Notes config so it outputs the correct data (provided the client is willing to change it)

你不知道。

Is this a bug?

看起来像,是的。我在 Indy 的问题跟踪器中开了一张票:

https://github.com/IndySockets/Indy/issues/329

And if so, how can I work around it?

您可以更改 Indy 的源代码并重新编译它。正如您已经指出的那样,每次更新 Indy 时都必须应用它。

另一种方法是使用迂回挂钩将失败的函数重定向到您自己的替换函数。他们不需要虚拟就可以绕道而行。