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é.
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
Vous devez vous connecter pour publier un commentaire.
Les Perspectives de l'Interopérabilité de la bibliothèque n'est pas seulement pour les compléments. Par exemple, il pourrait être utilisé pour écrire une application console qui se contente de lire tous vos Contacts d'Outlook. Je suis assez sûr que le standard de Microsoft Outlook Interop bibliothèque vous permettra de lire le mail - même si elle sera probablement lancer une invite de sécurité dans Outlook, l'utilisateur devra cliquer à travers.
MODIFICATIONS: en Fait, la mise en œuvre de lecture de courrier à l'aide d'Outlook Interop dépend de ce que votre définition de "autonome" signifie. Les Perspectives de l'Interopérabilité lib nécessite Outlook pour être installé sur la machine client afin de fonctionner.
Il n'a pas besoin d'être ouvert. L'interop lib juste s'ouvre à l'arrière-plan et il se ferme lorsque votre fait.
Ahhh, ok, ça sonne bien. Je vois quelques exemples de comment l'utiliser pour lire des Contacts et, mais je suis seulement intéressé par la lecture des messages dans un fichier PST, pas de Contacts hors d'un serveur Exchange. Savez-vous, ou avez un exemple, sur cette?
J'ai eu un exemple de code dans mon post pour les 10 dernières minutes. Ne qui servent de point de départ?
Merci pour l'exemple de code. Qui ressemble, c'est la lecture à partir de la Boîte aux lettres et non pas un fichier PST, mais je vais voir ce que je peux modifier pour lire un fichier PST. Je vais poster une mise à jour bientôt.
OriginalL'auteur Matthew Ruston
Comme déjà mentionné dans un de vos liées, de SORTE questions, je recommande aussi à l'aide de la Rachat de la bibliothèque. Je suis de l'utiliser dans une application commerciale pour le traitement des mails Outlook et l'exécution de diverses tâches avec eux. Il fonctionne parfaitement et empêche la ennuyeux alertes de sécurité. Cela signifierait l'aide de COM Interop, mais cela ne devrait pas être un problème.
Il y a une bibliothèque dans ce package appelé RDO qui est de remplacer la CDO 1.21, ce qui vous permet d'accéder à des fichiers PST directement. Ensuite, c'est aussi simple que la rédaction (code VB6):
OriginalL'auteur MicSim
Je suis allé à travers et ne le refactoring pour les sous-dossiers
OriginalL'auteur Tom Kidd
Vous pouvez utiliser pstsdk.net: .NET port de Format de Fichier PST SDK de la bibliothèque qui est open-source pour lire fichier pst sans Outlook est installé.
C'est un film, pas un port (ce qui est important parce que c'est moins portable de cette façon).
OriginalL'auteur Giorgi
Pour ceux mentionnant qu'ils ne voient pas les Magasins de la collection:
Les Magasins de la collection a été ajouté dans Outlook 2007. Donc, si vous êtes en utilisant une bibliothèque d'interopérabilité créé à partir d'une version antérieure (dans une tentative pour être indépendante de la version - c'est assez commun), alors ce serait pourquoi vous ne verrez pas les Magasins de la collection.
Vos seules options pour obtenir les Magasins sont à effectuez l'une des opérations suivantes:
OriginalL'auteur Ryan Farley
Une autre option solution: NetPstExtractor
C'est une .Net API pour lire fichier PST d'Outlook sans Outlook est installé.
Vous pouvez trouver la version de démo de ici.
OriginalL'auteur neolei
Nous allons utiliser ce, afin de fournir une solution qui ne repose pas sur outlook.
http://www.independentsoft.de/pst/index.html
Il est très coûteux, mais nous espérons qui fera baisser les temps de développement et l'augmentation de la qualité.
OriginalL'auteur Chris Barry
L'API de MAPI est ce que vous cherchez. Malheureusement, il n'est pas disponible dans .Net donc je crains que vous devrez recourir à l'appel de code non managé.
Un rapide Google révèle plusieurs wrappers disponibles, peut-être qu'ils travaillent pour vous?
Cela peut également être utile: http://www.wischik.com/lu/programmer/mapi_utils.html
OriginalL'auteur Gerrie Schenck
Cette .NET connecteur pour Outlook peut vous aider à démarrer.
OriginalL'auteur Chris Ballance
Oui, avec Independentsoft PST .NET est possible de lire/d'exportation mot de passe protégé et crypté .fichier pst.
OriginalL'auteur AlanSB
J'ai trouvé quelques ressources directement à partir de Microsoft qui peut être utile pour mener à bien cette tâche. Un recherche sur MSDN révèle ce qui suit.
Notez que lorsque vous ajoutez une référence à Microsoft.Bureau de.Interop.Outlook, la documentation insiste sur le fait que vous le faites via le .NET onglet au lieu de l'onglet COM.
OriginalL'auteur HappyNomad
Vraiment utile de code. Si vous avez de la tvp et de stocker vos messages dans sa racine (sans le répertoire de), vous pouvez utiliser la syntaxe suivante dans la méthode readPst:
OriginalL'auteur Moises Quintero Orea
Oui, vous pouvez utiliser MS Access et ensuite, soit vous importez votre fichier pst contenu ou tout simplement un lien (lent!).
Ah oui désolé, j'ai oublié le C#, mais si vous peut-être pouvez contrôler l'Accès à partir de C# vous pouvez toujours aller de cette façon. Non testé!
OriginalL'auteur Lorenzo