2015-11-23 2 views
0

Utilisation d'IMAP - Nous avons beaucoup de boîtes aux lettres partagées sous l'espace de noms 'utilisateur' partagé avec un '.' délimiteur. J'essaie d'écrire un logiciel qui migrera ces boîtes aux lettres partagées vers le serveur Exchange. J'essaie d'ouvrir une boîte aux lettres/un dossier spécifique dans l'espace de noms partagé 'utilisateur' auquel le serveur IMAP répond NON au SELECT. Ouverture en utilisant l'extrait commenté ci-dessous, pour Inbox fonctionne très bien. Probablement parce que je n'ai pas accès au dossier 'root/base-user' mais j'ai besoin de spécifier le dossier enfant, je n'ai aucune idée de comment se connecter à la boîte aux lettres partagée en question. Par exemple ce serait 'user.sharedmailboxA'Comment sélectionner un espace de noms partagé

Pardonnez ma terminologie ici, total noob avec IMAP! Merci

Les excepts code suivant avec « NON », l'accès sans doute refusé quand j'essayer et essayer la méthode 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); 
     } 
    } 
} 

Répondre

0

Dans IMAP, vous ne pouvez pas toujours sélectionner un dossier. Parfois, il a l'attribut \NoSelect ou \NonExistent qui échouera tous les deux avec un NON si vous essayez de les sélectionner.

En général, vous ne pouvez pas ouvrir les dossiers d'espaces de noms (l'exception typique à ceci est quand l'INBOX est considéré comme un espace de noms sur des serveurs IMAP tels que Courier IMAP).

Ce que vous devez faire est interroger les sous-dossiers de user_namespace et essayez de sélectionner l'un des ces dossiers (en supposant qu'il ne possède pas les attributs FolderAttributes.NoSelect ou FolderAttributes.NonExistent):

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