C# 如何选择sharednamespace

C# 如何选择sharednamespace,c#,mailkit,mimekit,C#,Mailkit,Mimekit,使用IMAP-我们在共享的“用户”命名空间下有许多共享邮箱,并带有“.”分隔符 我正在尝试编写一些软件,将这些共享邮箱迁移到Exchange server 我正在尝试打开“用户”共享命名空间中的特定邮箱/文件夹,IMAP服务器对该选择响应“否”。使用下面的评论摘录打开“收件箱”,效果很好。可能是因为我没有访问“根/基本用户文件夹”的权限,但我需要指定子文件夹,所以我不知道如何连接到讨论中的共享邮箱。例如,它将是“user.sharedmailboxA” 请原谅我这里的术语,IMAP的全无!谢谢

使用IMAP-我们在共享的“用户”命名空间下有许多共享邮箱,并带有“.”分隔符

我正在尝试编写一些软件,将这些共享邮箱迁移到Exchange server

我正在尝试打开“用户”共享命名空间中的特定邮箱/文件夹,IMAP服务器对该选择响应“否”。使用下面的评论摘录打开“收件箱”,效果很好。可能是因为我没有访问“根/基本用户文件夹”的权限,但我需要指定子文件夹,所以我不知道如何连接到讨论中的共享邮箱。例如,它将是“user.sharedmailboxA”

请原谅我这里的术语,IMAP的全无!谢谢

以下代码以“否”表示例外,可能是在我尝试并尝试Open方法时拒绝访问:

  static void Main(string[] args)
        {
            using (var client = new ImapClient())
            {
                client.Connect("imap.c.com", 993, true);
            // Note: since we don't have an OAuth2 token, disable
            // the XOAUTH2 authentication mechanism.
            client.AuthenticationMechanisms.Remove("XOAUTH2");

            client.Authenticate("aa", "sdfdsf");

            var user_namespace = client.GetFolder(client.SharedNamespaces[0] );
            user_namespace.Open(FolderAccess.ReadOnly);


            // The Inbox folder is always available on all IMAP servers...

            //var inbox = client.Inbox;
            //inbox.Open(FolderAccess.ReadOnly);

            //Console.WriteLine("Total messages: {0}", inbox.Count);
            //Console.WriteLine("Recent messages: {0}", inbox.Recent);

            //for (int i = 0; i < inbox.Count; i++)
            //{
            //    var message = inbox.GetMessage(i);
            //    Console.WriteLine("Subject: {0}", message.Subject);
            //}

            //client.Disconnect(true);
        }
    }
}
static void Main(字符串[]args)
{
使用(var client=new ImapClient())
{
client.Connect(“imap.c.com”,993,true);
//注意:由于我们没有OAuth2令牌,请禁用
//XOAUTH2身份验证机制。
client.authenticationMechaniss.Remove(“XOAUTH2”);
客户身份验证(“aa”、“sdfdsf”);
var user_namespace=client.GetFolder(client.SharedNamespaces[0]);
user_namespace.Open(FolderAccess.ReadOnly);
//收件箱文件夹在所有IMAP服务器上始终可用。。。
//var inbox=client.inbox;
//收件箱。打开(FolderAccess.ReadOnly);
//WriteLine(“邮件总数:{0}”,inbox.Count);
//WriteLine(“最近的邮件:{0}”,inbox.Recent);
//for(int i=0;i
在IMAP中,您不能总是选择文件夹。有时它具有
\NoSelect
\noexistent
属性,如果您尝试选择它们,这两个属性都将失败,并显示“否”

通常,您无法打开命名空间文件夹(典型的例外情况是,收件箱被视为IMAP服务器(如Courier IMAP)上的命名空间)

您需要做的是查询
user\u namespace
的子文件夹,并尝试选择其中一个文件夹(假设它没有
folderAttribute.NoSelect
folderAttribute.NonExistent
属性):

foreach (var folder in user_namespace.GetSubfolders (false)) {
    if ((folder.Attributes & (FolderAttributes.NoSelect | FolderAttributes.NonExistent)) == 0))
        folder.Open (FolderAccess.ReadOnly);
}