Читайте PST-файли MS Outlook у 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 for .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");
                
        // Збережіть це повідомлення для потокової передачі у форматі повідомлення
        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 за допомогою методу PersonalStorage.FromFile().
  • Отримайте посилання на папку контактів за допомогою методу PersonalStorage.RootFolder.GetSubFolder(“Contacts”).
  • Отримайте колекцію контактів за допомогою методу FolderInfo.GetContents().
  • Перегляньте колекцію контактів і прочитайте кожен контакт або збережіть його.

У наведеному нижче прикладі коду показано, як отримати контакти з файлу 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 for .NET, отримавши тимчасову ліцензію.

Висновок

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

Дивись також