Extrahieren von Nachrichten aus Outlook‑PST und Speichern als MSG
Dieser Migrationstipp zeigt, wie man Nachrichten aus einer Outlook‑PST‑Datei extrahiert und sie als MSG‑Dateien auf die Festplatte speichert. Dabei sind mehrere Schritte nötig:
- Lesen der Outlook‑PST‑Datei,
- Nachrichten extrahieren und schließlich,
- die extrahierten Nachrichten speichern.
Es gibt verschiedene Wege, das gleiche Ergebnis zu erzielen: Dieser Artikel vergleicht die Verwendung von VSTO und Aspose.Email. Zunächst sind Code‑Beispiele für die Verwendung von Microsoft Office Interop um Nachrichten aus PST zu extrahieren. Nach diesem Beispiel, Code‑Beispiele zeigen, wie Aspose.Email Outlook verwendet wird, in Java, um dieselbe Aufgabe auszuführen.
Using Microsoft Office Interop
Um Office‑Automation‑Objekte für Microsoft Outlook zu verwenden, fügen Sie dem Projekt Verweise auf die Microsoft Office Interop‑Bibliotheken für Outlook hinzu. Microsoft Office Outlook muss zudem auf dem Rechner installiert sein, auf dem der Code ausgeführt wird. Der im folgenden Code‑Beispiel verwendete Namespace ist Microsoft.Office.Interop.Outlook.
Programming Examples
C#
string pstFilePath = @"C:\sample.pst";
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["items"].GetRootFolder();
// Traverse through all folders in the PST file
// TODO: This is not recursive
Folders subFolders = rootFolder.Folders;
foreach (Folder folder in subFolders)
{
Items items = folder.Items;
foreach (object item in items)
{
if (item is MailItem)
{
// Retrieve the Object into MailItem
MailItem mailItem = item as MailItem;
Console.WriteLine("Saving message {0} ....", mailItem.Subject);
// Save the message to disk in MSG format
// TODO: File name may contain invalid characters [\ / : * ? " < > |]
mailItem.SaveAs(@"\extracted\" + mailItem.Subject + ".msg",OlSaveAsType.olMSG);
}
}
}
// Remove PST file from Default Profile
outlookNs.RemoveStore(rootFolder);
Verwendung von Aspose.Email
Die folgenden Code‑Snippets erledigen dasselbe wie der obige Code verwendet jedoch Aspose.Email. Mit installierten Aspose.Email für Java wird Microsoft Outlook nicht mehr auf dem Rechner benötigt. Verweisen Sie einfach auf Aspose.Email, um das Projekt erfolgreich zu bauen und auszuführen.
Programmierbeispiele
String pstFilePath = "C:\\sample.pst";
// Create an instance of PersonalStorage and load the PST from file
try (PersonalStorage personalStorage = PersonalStorage.fromFile(pstFilePath)) {
// Get the list of subfolders in PST file
FolderInfoCollection folderInfoCollection = personalStorage.getRootFolder().getSubFolders();
// Traverse through all folders in the PST file
// This is not recursive
for (FolderInfo folderInfo : folderInfoCollection) {
// Get all messages in this folder
MessageInfoCollection messageInfoCollection = folderInfo.getContents();
// Loop through all the messages in this folder
for (MessageInfo messageInfo : messageInfoCollection) {
// Extract the message in MapiMessage instance
MapiMessage message = personalStorage.extractMessage(messageInfo);
System.out.println("Saving message " + message.getSubject() + " ...");
// Save the message to disk in MSG format
// TODO: File name may contain invalid characters [\ / : * ? " < > |]
message.save("\\extracted\\" + message.getSubject() + ".msg");
}
}
}