2015-11-23 11 views
0

Использование IMAP. У нас есть много общих почтовых ящиков под общим «пользовательским» пространством имен с '.' разделитель.Как выбрать sharednamespace

Я пытаюсь написать некоторое программное обеспечение, которое перенесет эти общие почтовые ящики на сервер Exchange.

Я пытаюсь открыть конкретный почтовый ящик/папку в общем пространстве имен пользователя, на который сервер IMAP отвечает NO на SELECT. Открытие с использованием прокомментированной выдержки ниже, для Inbox работает отлично. Вероятно, потому что у меня нет доступа к папке «root/base-user», но мне нужно указать дочернюю папку, я понятия не имею, как подключиться к общему почтовому ящику, о котором идет речь. Например, это будет «user.sharedmailboxA»

Простите мою терминологию здесь, общее число с IMAP! Благодаря

Следующий код excepts с «NO», предположительно, отказано в доступе, когда я пытаюсь и попробовать открытый метод:

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); 
     } 
    } 
} 

ответ

0

В IMAP, не всегда можно выбрать папку. Иногда у него есть атрибут \NoSelect или \NonExistent, который будет работать с ошибкой NO, если вы попытаетесь выбрать их.

В общем случае вы не можете открывать папки пространства имен (типичным исключением является то, что INBOX считается пространством имен на IMAP-серверах, таких как Courier IMAP).

Что вам нужно сделать, это запрос подпапки user_namespace и попробуйте выбрать одну из этих папок (если он не имеет FolderAttributes.NoSelect или FolderAttributes.NonExistent атрибутов):

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