0

メールボックス内のフォルダーを開く MailKit を使用する方法があります。アクセスレベルが指定された引数よりも低い場合、フォルダーを閉じてから、正しいアクセスレベルでフォルダーを開きます。

このようなもの:

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」応答で応答しました。

私が結論付けることができるのは、CLOSE 操作 (IMAP4 によると UNSELECT) を実行するための結合からの応答は、メールボックスが選択されていないことが原因であるはずの BAD 応答を与えるということです。

この閉じる操作をどのように処理すれば、アクセス レベルの低いフォルダーを閉じて、正しいアクセス レベルで閉じた後に開くことができますか?

4

1 に答える 1

1

まず、別のフォルダーを開く前に、または別のアクセス レベルで同じフォルダーを開く前に、フォルダーを閉じる必要がないことを指摘しておく必要があります。以前に開いたフォルダーは、サーバーによって常に自動的に閉じられます。

多くの人がフォルダーを閉じる必要があると考えているように見えるので、これについて言及するようにドキュメントを更新する必要があります。

とにかく、そうは言っても、どうやってこれが起こるのかわかりません。使用している MailKit のバージョンは何ですか? 一部の古い MailKit バージョンには、適切なフォルダーを開いた状態を維持しないバグがあり、これが原因である可能性があります。

于 2015-04-08T13:15:56.157 に答える