2015-03-29 2 views
1

Lorsque j'utilise OutlookSpy pour obtenir les EntryIDs de MailItems dans un dossier particulier et leur fournir le code suivant:Erreur lors de l'ouverture des Perspectives MailItems avec GetItemFromID en utilisant EntryID à partir d'Outlook Spy

Outlook.Application myApp = new Outlook.ApplicationClass(); 
Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); 

try 
{ 
    object obj = mapiNameSpace.GetItemFromID(sEntryID); 
    if (obj is Outlook.MailItem) 
    { 
    var getItem = (Outlook.MailItem)mapiNameSpace.GetItemFromID(sEntryID); 
    getItem.Display(); 
    } 
} 
catch (Exception Ex) 
{ 
    Global.Common.LogError("Error accessing MailItem", Ex, "EntryID " + sEntryID + " not found in " + sFolder, "Warning"); 
} 

Je reçois des erreurs de messagerie inconnus pour certaines valeurs EntryID et l'affichage réussi des messages dans Outlook avec d'autres. Quelqu'un peut-il suggérer quels attributs les MailItems pourraient avoir qui affecteront si je peux les afficher avec succès en utilisant GetItemFromID ou toute autre méthode d'affichage fiable de tous les messages par EntryID?

+0

Quelle erreur obtenez-vous exactement dans le code? Message d'erreur? –

+0

S'il vous plaît laissez-moi savoir si la spécification du second paramètre aide explicitement ou non. –

Répondre

1

Le magasin de messages où réside le message a-t-il été touché dans la session Outlook active? Le fonctionnement des fournisseurs MAPI, quand un fournisseur est chargé par MAPI, il enregistre l'ensemble des guids id d'entrée (octets 5-20 dans l'id d'entrée) qu'il va gérer. Si le magasin PST particulier n'a pas été touché dans la session en cours, MAPI ne sait rien de ses identifiants d'entrée. Vous pouvez d'abord accéder à tous les magasins de la session en cours (pour vous assurer que MAPI connaît leurs ID d'entrée) ou utiliser l'ID d'entrée de magasin (second paramètre, facultatif) lors de l'appel GetItemFromId - de cette façon Outlook ouvrira le magasin D'abord, demandez au magasin d'ouvrir l'article. Vous pouvez également appeler Namespace.AddStore/AddStoreEx pour charger le fichier PST donné s'il ne figure pas déjà dans le profil en cours.

Vous pouvez également enregistrer les détails de l'exception (Ex.Message) dans votre gestionnaire d'exceptions.

0

Merci à tous les répondants - cela explique pourquoi parfois des messages particuliers s'ouvraient et parfois non. En obtenant le StoreID en utilisant le code suivant:

Outlook.Application myApp = new Outlook.ApplicationClass(); 
        Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); 
        Object oStoreID = Common.GetFolder(myApp, sFolder).StoreID; 
        try 
        { 
         object obj = mapiNameSpace.GetItemFromID(sEntryID,oStoreID); 
         if (obj is Outlook.MailItem) 
         { 
          Outlook.MailItem getItem = (Outlook.MailItem)mapiNameSpace.GetItemFromID(sEntryID,oStoreID); 
          getItem.Display(); 
         } 
        } 

 public static Outlook.Folder GetFolder(Outlook.Application App, string folderPath) 
    { 
     Outlook.Folder folder; 
     string backslash = @"\"; 
     try 
     { 
      if (folderPath.StartsWith(@"\\")) 
      { 
       folderPath = folderPath.Remove(0, 2); 
      } 
      String[] folders = 
       folderPath.Split(backslash.ToCharArray()); 
      folder = 
       App.Session.Folders[folders[0]] 
       as Outlook.Folder; 
      if (folder != null) 
      { 
       for (int i = 1; i <= folders.GetUpperBound(0); i++) 
       { 
        Outlook.Folders subFolders = folder.Folders; 
        folder = subFolders[folders[i]] 
         as Outlook.Folder; 
        if (folder == null) 
        { 
         return null; 
        } 
       } 
      } 
      return folder; 
     } 
     catch { return null; } 
    } 

Tous les MailItems affichent maintenant dans Outlook.

0

Je vais juste jeter ceci ici pour posterity-- Outlook 2002 exige que l'ID d'entrée fourni à GetItemFromID utilise des caractères hex majuscules.