2015-04-07 26 views
0

我有一個使用MailKit的方法,它將在郵箱中打開一個文件夾。如果acceslevel低於提供的參數,則它將關閉該文件夾,然後在右側的accesslevel中打開該文件夾。MailKit IMailFolder.Close拋出異常

事情是這樣的:

public void OpenFolder(IMailFolder folder, FolderAccess level) 
{ 
    if(folder.IsOpen() && folder.FolderAccess < level) 
    { 
     //Closed folder 
     using(var task = folder.CloseAsync()) 
     { 
      task.Wait(); 
     } 
     //Open folder with correct accesslevel 
     folder.Open(level); 
    } 
} 

的task.Wait()部分被扔AggregateException(這似乎有按類型ImapCommandException的內除外),告訴我說:

MailKit.Net.Imap.ImapCommandException:IMAP服務器以'BAD'響應回覆'UNSELECT'命令。

我可以得出結論是綁定做一個關閉操作(根據IMAP4是UNSELECT)的響應,給出壞反應,這應該是由沒有選擇郵箱引起的。

我該如何處理這個關閉操作,以便我可以關閉一個訪問級別較低的文件夾,並在正確的accesslevel中關閉一個文件夾?

回答

1

首先,我應該指出,在打開另一個文件夾或甚至具有不同訪問級別的相同文件夾之前,無需關閉文件夾。以前打開的文件夾將始終由服務器自動關閉。

我應該更新文檔來提及這一點,因爲似乎很多人似乎認爲他們需要關閉文件夾。

無論如何,那說,我不知道這是如何發生的。你使用的是什麼版本的MailKit?某些較舊的MailKit版本中存在一個錯誤,它沒有保持正確的文件夾打開狀態,這可能是您正在打的狀態。

+0

我使用的版本是MailKit的v1.0.12.0,該版本是否包含您引用的問題? – grmihel

+0

是的,該版本有我提到的修復。 UNSELECT規範表明,如果服務器以「BAD」響應,則表示該文件夾未打開。你有可能製作一個簡單的測試用例來說明這個bug嗎?試圖關閉它之前,文件夾的訪問級別是多少? – jstedfast

+0

這似乎發生在連接超時後拋出'IMAP服務器意外斷開連接'。當我試圖關閉具有.IsOpen等於true的文件夾時,它似乎會拋出上面顯示的錯誤。 – grmihel