Puis-je lire un Outlook (2003/2007) fichier PST en C#?

Est-il possible de lire un .Fichier PST en utilisant le C#? Je voudrais faire cela comme une application autonome, non pas comme un addin Outlook (si c'est possible).

Si l'avons vu d'autres DONC questions similaire à cette mention MailNavigator, mais je cherche à le faire par programmation en C#.

J'ai regardé le Microsoft.Bureau de.Interop.Outlook espace de noms, mais qui semble être juste addins pour Outlook. LibPST semble être en mesure de lire les fichiers PST, mais c'est en C (désolé Joel, je n'ai pas apprendre le C avant d'obtenir son diplôme).

Toute aide serait grandement appréciée, merci!

EDIT:

Merci à vous tous pour les réponses! J'ai accepté Matthieu Ruston, que la réponse de la réponse parce que, au final, il m'a conduit à le code que je cherchais. Voici un exemple simple de ce que j'ai eu à travailler (Vous aurez besoin d'ajouter une référence à Microsoft.Bureau de.Interop.Outlook):

using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Outlook;

namespace PSTReader {
    class Program {
        static void Main () {
            try {
                IEnumerable<MailItem> mailItems = readPst(@"C:\temp\PST\Test.pst", "Test PST");
                foreach (MailItem mailItem in mailItems) {
                    Console.WriteLine(mailItem.SenderName + " - " + mailItem.Subject);
                }
            } catch (System.Exception ex) {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }

        private static IEnumerable<MailItem> readPst(string pstFilePath, string pstName) {
            List<MailItem> mailItems = new List<MailItem>();
            Application app = new Application();
            NameSpace outlookNs = app.GetNamespace("MAPI");
            //Add PST file (Outlook Data File) to Default Profile
            outlookNs.AddStore(pstFilePath);
            MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();
            //Traverse through all folders in the PST file
            //TODO: This is not recursive, refactor
            Folders subFolders = rootFolder.Folders;
            foreach (Folder folder in subFolders) {
                Items items = folder.Items;
                foreach (object item in items) {
                    if (item is MailItem) {
                        MailItem mailItem = item as MailItem;
                        mailItems.Add(mailItem);
                    }
                }
            }
            //Remove PST file from Default Profile
            outlookNs.RemoveStore(rootFolder);
            return mailItems;
        }
    }
}

Remarque: Ce code suppose que Outlook est installé et déjà configuré pour l'utilisateur actuel. Il utilise le Profil par Défaut (vous pouvez modifier le profil par défaut en allant à la Messagerie dans le Panneau de Contrôle). Une amélioration majeure sur ce code serait de créer un profil temporaire à utiliser au lieu de la valeur par Défaut, puis de le détruire une fois terminé.

Je n'avais aucune idée que le AddStores et Stocke la liste même existé dans les Perspectives de l'API. Bon post!
Ai-je raté quelque chose? Pourquoi ne puis-je pas accéder à la Magasins de la collection de la outlookNS? Il n'est pas dans intellisense.
Avez-vous d'inclure " à l'aide de Microsoft.Bureau de.Interop.Outlook; " dans votre code?
Je l'ai fait, et je peux voir tout le reste. Je ne peux pas voir les magasins de la collection de la perspective de l'espace de noms. Je viens de penser à quelque chose... quelle version de Microsoft.Bureau de.Interop.Outlook ne vous avez mentionnés? Je suis à l'aide de 11.
Vous pouvez également essayer de Aspose.Réseau pour la .NET pour lire et extraire des fichiers msg de fichier PST d'Outlook. Veuillez visiter http://www.aspose.com/documentation/.net-components/aspose.network-for-.net/read-outlook-pst-file-and-get-folders-and-subfolders-information.html pour plus d'informations.

OriginalL'auteur Andy May | 2009-02-23