【发布时间】:2017-07-04 21:51:09
【问题描述】:
我有两个客户端(ClientA 和 ClientB)连接到 IMAP 服务器。 ClientA 正在运行 mailkit。当我使用 ClientB 删除或移动文件夹时,mailkit 客户端在尝试从已删除的文件夹中打开或获取消息时出错。实际上,当我尝试从已删除的文件夹中获取消息时,我与服务器断开连接(我猜这是服务器的预期行为),因为我试图检测我要执行命令的文件夹是否,仍然存在。
我看到 mailkit 使用 FolderCache,当我使用 GetFolder 方法时,即使在我重新连接客户端后,当我使用 GetFolder(string path) 方法时,我仍然会获得已删除文件夹的 IMailFolder 引用。为了避免 FolderCache,我每次要同步远程文件夹时都会创建一个新的 MailClient 实例,以避免缓存中没有现有文件夹。我想知道在这种情况下这是否是推荐的方法?
更新:
所以,我现在正在使用 GetSubfolders 命令,我可以看到一个 LIST 命令已发送到服务器。但是,在以下情况下,该命令似乎存在问题:
ClientB 正在删除文件夹 INBOX.spam.op,ClientA 正在尝试移动路径为 INBOX.spam.op.folder1 的文件夹。发生的事情是 - 服务器正在创建一个新文件夹 INBOX.spam.op,其属性为 NonExistent。这是预期的服务器行为,以便创建路径为 INBOX.spam.op.folder1
的文件夹但是,当我在 INBOX.spam 上使用 GetSubfolders 时,看看 Mailkit 会发生什么 - 我得到一个 IMailFolder 实例,其名称 = "op",属性 = 新属性 NonExistent 和旧 "op" 属性的混合文件夹(FolderCache 中的文件夹)。 NonExistent 的 UidValidity 应该为 0,但它与 FolderCache 中“op”文件夹的 UIDValidity 相同,即使服务器响应是这样
C: A00000102 LIST "" "INBOX.spam.%" 返回(已订阅儿童状态(UIDVALIDITY)) S: * LIST (\NonExistent \HasChildren) "."收件箱.spam.op S:A00000102 OK 列表完成(0.001 + 0.000 秒)。
我尝试继承 ImapClient 并添加我自己的方法 GetFolderNoCache(string path) 但这不起作用,因为内部类。还有其他建议吗?
【问题讨论】:
标签: mailkit