c# Kann ich eine Outlook (2003/2007) PST-Datei in C # lesen?





6 Answers

Wie bereits in einer deiner verbundenen SO-Fragen erwähnt, würde ich dir auch empfehlen, die Redemption Bibliothek zu verwenden. Ich benutze es in einer kommerziellen Anwendung für die Verarbeitung von Outlook-Mails und die Durchführung verschiedener Aufgaben mit ihnen. Es funktioniert einwandfrei und verhindert, dass die lästigen Sicherheitswarnungen angezeigt werden. Es würde bedeuten, COM Interop zu verwenden, aber das sollte kein Problem sein.

In diesem Paket befindet sich eine Bibliothek namens RDO, die den CDO 1.21 ersetzt, mit dem Sie direkt auf PST-Dateien zugreifen können. Dann ist es so einfach wie das Schreiben (VB6-Code):

set Session = CreateObject("Redemption.RDOSession")
'open or create a PST store
set Store = Session.LogonPstStore("c:\temp\test.pst")
set Inbox = Store.GetDefaultFolder(6) 'olFolderInbox
MsgBox Inbox.Items.Count
c# outlook outlook-2007 outlook-2003 pst

Ist es möglich, eine PST-Datei mit C # zu lesen? Ich möchte das als eigenständige Anwendung machen, nicht als Outlook-Add-In (wenn das möglich ist).

Wenn ich other SO questions similar , MailNavigator ich MailNavigator aber ich möchte das programmatisch in C # machen.

Ich habe den Microsoft.Office.Interop.Outlook Namespace angeschaut, aber anscheinend nur für Outlook-Addins. LibPST scheint in der Lage zu sein, PST-Dateien zu lesen, aber das ist in C (sorry Joel, ich habe C vor dem Abschluss nicht gelernt ).

Jede Hilfe würde sehr geschätzt werden, danke!

BEARBEITEN:

Vielen Dank für die Antworten! Ich habe Matthew Rustons Antwort als Antwort akzeptiert, weil sie mich schließlich zu dem Code geführt hat, nach dem ich gesucht habe. 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: In diesem Code wird davon ausgegangen, dass Outlook für den aktuellen Benutzer installiert und bereits konfiguriert ist. Es verwendet das Standardprofil (Sie können das Standardprofil bearbeiten, indem Sie in der Systemsteuerung zu Mail wechseln). Eine wichtige Verbesserung dieses Codes besteht darin, ein temporäres Profil zu erstellen, das anstelle des Standards verwendet wird, und es anschließend zu zerstören.







Eine weitere optionale Lösung: NetPstExtractor

Dies ist eine .NET-API zum Lesen der Outlook-PST-Datei ohne installiertem Outlook.

Sie können eine Demoversion here.




This .NET-Connector für Outlook könnte Ihnen den Einstieg erleichtern.




Wir werden dies nutzen, um eine Lösung zu bieten, die nicht auf Outlook basiert.

http://www.independentsoft.de/pst/index.html

Es ist sehr teuer, aber wir hoffen, dass dadurch die Entwicklungszeit verkürzt und die Qualität erhöht wird.




Ich habe einige Ressourcen direkt von Microsoft gefunden, die hilfreich sein können, um diese Aufgabe zu erledigen. Eine Suche auf MSDN zeigt Folgendes.

Beachten Sie, dass beim Hinzufügen eines Verweises auf Microsoft.Office.Interop.Outlook die Dokumentation darauf besteht, dass Sie dies über die Registerkarte .NET anstelle der Registerkarte COM tun.




Related