Извлечение сообщений из Outlook PST и сохранение их в MSG в Aspose.Email
Contents
[
Hide
]
VSTO
string pstFilePath = "sample.pst";
Outlook.Application app = new Application();
NameSpace outlookNs = app.GetNamespace("MAPI");
// Добавление PST файла (файла данных Outlook) в профиль по умолчанию
outlookNs.AddStore(pstFilePath);
MAPIFolder rootFolder = outlookNs.Stores["sample"].GetRootFolder();
// Проход по всем папкам в PST файле
// TODO: Это не рекурсивно
Folders subFolders = rootFolder.Folders;
foreach (Folder folder in subFolders)
{
Items items = folder.Items;
foreach (object item in items)
{
if (item is MailItem)
{
// Получение объекта в MailItem
MailItem mailItem = item as MailItem;
Console.WriteLine("Сохранение сообщения {0} ....", mailItem.Subject);
// Сохранение сообщения на диск в формате MSG
// TODO: Имя файла может содержать недопустимые символы [\ / : * ? " < > |]
mailItem.SaveAs(@"\extracted\" + mailItem.Subject + ".msg", OlSaveAsType.olMSG);
}
}
}
// Удаление PST файла из профиля по умолчанию
outlookNs.RemoveStore(rootFolder);
Aspose.Email
string pstFilePath ="sample.pst";
// Создание экземпляра PersonalStorage и загрузка PST из файла
using (PersonalStorage personalStorage = PersonalStorage.FromFile(pstFilePath))
{
// Получение списка подпапок в PST файле
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// Проход по всем папкам в PST файле
// TODO: Это не рекурсивно
foreach (FolderInfo folderInfo in folderInfoCollection)
{
// Получение всех сообщений в этой папке
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
// Цикл через все сообщения в этой папке
foreach (MessageInfo messageInfo in messageInfoCollection)
{
// Извлечение сообщения в экземпляр MapiMessage
MapiMessage message = personalStorage.ExtractMessage(messageInfo);
Console.WriteLine("Сохранение сообщения {0} ....", message.Subject);
// Сохранение сообщения на диск в формате MSG
// TODO: Имя файла может содержать недопустимые символы [\ / : * ? " < > |]
message.Save(@"\extracted\" + message.Subject + ".msg");
}