2015-04-07 4 views
0

У меня есть метод с использованием MailKit, который откроет папку в вашем почтовом ящике. Если уровень доступа ниже, чем предоставленный аргумент, он закроет папку, а затем откроет папку в правом уровне доступа.MailKit IMailFolder.Close throws exception

Что-то вроде этого:

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 ответил команде «UNSELECT» с ответом «BAD».

Что я могу сделать вывод, что ответ от завязывания сделать ЗАКРЫТЬ операцию (которая, согласно протоколу IMAP4 UNSELECT), дают BAD ответ, который должен быть вызван не почтовый ящик выбранного.

Как я могу справиться с этой закрытой операцией, чтобы я мог закрыть папку с более низким уровнем доступа и открыть ее закрытие на правильном уровне доступа ???

ответ

1

Во-первых, я должен указать, что нет необходимости закрывать папку, прежде чем открывать другую папку или даже одну и ту же папку с другим уровнем доступа. Ранее открытая папка всегда будет автоматически закрыта для вас сервером.

Возможно, я должен обновить документы, чтобы упомянуть об этом, поскольку кажется, что многие люди думают, что им нужно закрыть папки.

В любом случае, я сказал, что не знаю, как это могло произойти. Какую версию MailKit вы используете? В некоторых старых версиях MailKit произошла ошибка, которая не сохранила правильное состояние открытия папки, которое может быть тем, что вы нажимаете.

+0

Версия, которую я использую, является v1.0.12.0 MailKit, содержит ли эта версия проблему, на которую вы ссылаетесь? – grmihel

+0

Да, эта версия имеет исправление, о котором я упомянул. Спецификации UNSELECT показывают, что если сервер отвечает «BAD», это означает, что папка не была открыта. Есть ли вероятность, что вы можете создать простой тестовый пример, который иллюстрирует эту ошибку для меня? Каков уровень доступа к папке, прежде чем пытаться закрыть его? – jstedfast

+0

Кажется, что происходит после того, как соединение имеет тайм-аут и выбрасывает «IMAP-сервер неожиданно отключен». Когда я пытаюсь закрыть папку, у которой есть .IsOpen равно true, тогда, похоже, она выдает ошибку, указанную выше. – grmihel