Чтение файлов MS Outlook PST в C# .NET

PST (Personal Storage Table) — это формат файла хранилища, который используется различными программами Microsoft, такими как MS Outlook, Exchange и Windows Messaging. Файлы PST могут хранить сообщения, контакты, календари, события и т. д. В некоторых случаях вам может потребоваться проанализировать файл PST и извлечь из него данные программным путем. Для этого в этой статье показано, как читать файлы MS Outlook PST с помощью C# .NET. В частности, вы узнаете, как извлекать информацию из папок, читать электронные письма и извлекать контакты из файла PST.

.NET API для чтения файлов Outlook PST

Aspose.Email для .NET — это мощный API для обработки электронной почты, который позволяет создавать и отправлять электронные письма из приложений .NET. Кроме того, он поддерживает работу с популярными форматами файлов электронной почты и хранения. Мы будем использовать этот API для чтения информации о папках, сообщений и контактов из файлов PST. Вы можете либо скачать API, либо установить его через NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Чтение PST-файла Outlook в C# .NET

Ниже приведены шаги для чтения файла PST и извлечения его информации на C#.

  • Загрузите файл PST, используя метод PersonalStorage.FromFile().
  • Получите коллекцию папок в PST, используя метод PersonalStorage.RootFolder.GetSubFolders().
  • Получить информацию о папках, такую как имя, количество элементов и т. д.

В следующем примере кода показано, как анализировать файл PST и получать информацию о папках.

// Загрузить PST-файл
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Получить информацию о папках
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Просмотрите каждую папку, чтобы отобразить ее информацию
foreach (FolderInfo folderInfo in folderInfoCollection)
{
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("Total items: " + folderInfo.ContentCount);
    Console.WriteLine("Total unread items: " + folderInfo.ContentUnreadCount);
    Console.WriteLine("-----------------------------------");
}

Чтение электронных писем из файла PST в C#

Электронные письма — это основные объекты, которые хранятся в файлах PST в MS Outlook. Итак, давайте посмотрим, как читать сообщения электронной почты из файла PST на C#.

  • Загрузите файл PST, используя метод PersonalStorage.FromFile().
  • Получите доступ к корневой папке, используя свойство PersonalStorage.RootFolder.
  • Получить коллекцию сообщений с помощью метода FolderInfo.GetContents().
  • Прокрутите сообщения в коллекции и прочитайте поля каждого сообщения.

В следующем примере кода показано, как извлекать сообщения из PST-файла в C# .NET.

// Загрузите файл Outlook PST
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Получить формат отображения файла PST
Console.WriteLine("Display Format: " + pst.Format);

// Получить информацию о папках и сообщениях
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Вызов рекурсивного метода для извлечения файлов msg из каждой папки
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Это рекурсивный метод отображения содержимого папки
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Показать имя папки
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Перебрать все сообщения в этой папке
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Получить сообщение в экземпляре MapiMessage
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Сохраните это сообщение на диск в формате msg
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Сохранить это сообщение в поток в формате msg
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Вызовите этот метод рекурсивно для каждой подпапки
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Извлечение контактов из файла PST в C#

В некоторых случаях вам может потребоваться извлечь информацию о контактах, хранящуюся в файле PST. Следующие шаги демонстрируют, как получить доступ к контактам в PST-файле на C#.

В следующем примере кода показано, как извлечь контакты из PST-файла на C#.

// Загрузите файл Outlook PST
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Получить папку Контакты
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Перебрать все контакты в этой папке
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Получить контактную информацию
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Трансляция в MapiContact
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Отображение некоторого содержимого на экране
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Сохранить на диск в формате MSG
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Избавьтесь от недопустимых символов, которые нельзя использовать в качестве имени файла
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Получите бесплатную лицензию API

Вы можете бесплатно попробовать Aspose.Email для .NET, получив временную лицензию.

Вывод

В этой статье вы узнали, как программно читать файлы PST в C# .NET. Кроме того, вы увидели, как читать информацию о папках, получать электронные письма и извлекать контакты из файла PST на C#. Кроме того, вы можете узнать больше об Aspose.Email для .NET, используя документацию. Кроме того, вы можете поделиться своими вопросами или запросами на нашем форуме.

Смотрите также