Ist es möglich, eine .PST-Datei mit C # zu lesen? Ich möchte dies als eigenständige Anwendung tun, nicht als Outlook-Add-In (falls dies möglich ist).
Wenn Sie andere ähnliche SO- Fragen gesehen haben, erwähnen Sie MailNavigator, aber ich möchte dies programmgesteuert in C # tun.
Ich habe mir den Microsoft.Office.Interop.Outlook- Namespace angesehen, aber das scheint nur für Outlook-Addins zu sein. LibPST scheint in der Lage zu sein, PST-Dateien zu lesen, aber dies ist in C (sorry Joel, ich habe C vor dem Abschluss nicht gelernt ).
Jede Hilfe wäre sehr dankbar, danke!
BEARBEITEN:
Vielen Dank für die Antworten! Ich akzeptierte Matthew Rustons Antwort als Antwort, weil sie mich letztendlich zu dem Code führte, den ich suchte. Hier ist ein einfaches Beispiel für meine Arbeit (Sie müssen einen Verweis auf Microsoft.Office.Interop.Outlook hinzufügen):
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;
}
}
}
Hinweis: Bei diesem Code wird davon ausgegangen, dass Outlook installiert und bereits für den aktuellen Benutzer konfiguriert ist. Es wird das Standardprofil verwendet (Sie können das Standardprofil bearbeiten, indem Sie in der Systemsteuerung auf Mail klicken). Eine wesentliche Verbesserung dieses Codes besteht darin, ein temporäres Profil zu erstellen, das anstelle des Standardprofils verwendet wird, und es nach Abschluss zu zerstören.