Czytaj pliki PST programu MS Outlook w języku C# .NET

PST (Personal Storage Table) to format pliku pamięci używany przez różne programy firmy Microsoft, takie jak MS Outlook, Exchange i Windows Messaging. Pliki PST mogą przechowywać wiadomości, kontakty, kalendarze, wydarzenia itp. W niektórych przypadkach może być konieczne przeanalizowanie pliku PST i programowe wyodrębnienie z niego danych. Aby to osiągnąć, w tym artykule pokazano, jak czytać pliki PST programu MS Outlook przy użyciu języka C# .NET. W szczególności dowiesz się, jak wyodrębniać informacje z folderów, czytać e-maile i pobierać kontakty z pliku PST.

.NET API do odczytu plików PST programu Outlook

Aspose.Email for .NET to potężny interfejs API do przetwarzania wiadomości e-mail, który umożliwia tworzenie i wysyłanie wiadomości e-mail z poziomu aplikacji .NET. Ponadto obsługuje pracę z popularnymi formatami plików e-mail i przechowywania. Będziemy używać tego interfejsu API do odczytywania informacji o folderach, wiadomości i kontaktów z plików PST. Możesz pobrać interfejs API lub zainstalować go za pomocą NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Odczytywanie pliku PST programu Outlook w języku C# .NET

Poniżej przedstawiono kroki, aby odczytać plik PST i wyodrębnić jego informacje w języku C#.

Poniższy przykładowy kod pokazuje, jak analizować plik PST i pobierać informacje o folderach.

// Załaduj plik PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Pobierz informacje o folderach
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Przeglądaj każdy folder, aby wyświetlić jego informacje
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("-----------------------------------");
}

Czytaj e-maile z pliku PST w C#

Wiadomości e-mail to główne podmioty przechowywane w plikach PST przez MS Outlook. Zobaczmy więc, jak czytać wiadomości e-mail z pliku PST w języku C#.

Poniższy przykładowy kod pokazuje, jak wyodrębnić komunikaty z pliku PST w języku C# .NET.

// Załaduj plik PST programu Outlook
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Uzyskaj format wyświetlania pliku PST
Console.WriteLine("Display Format: " + pst.Format);

// Pobierz informacje o folderach i wiadomościach
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Wywołaj metodę rekurencyjną, aby wyodrębnić pliki msg z każdego folderu
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Jest to rekurencyjna metoda wyświetlania zawartości folderu
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Wyświetl nazwę folderu
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Przejrzyj w pętli wszystkie wiadomości w tym folderze
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Pobierz wiadomość w instancji MapiMessage
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Zapisz tę wiadomość na dysku w formacie msg
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Zapisz tę wiadomość do strumienia w formacie msg
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Wywołaj tę metodę rekurencyjnie dla każdego podfolderu
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Wyodrębnij kontakty z pliku PST w C#

W niektórych przypadkach może być konieczne wyodrębnienie informacji o kontaktach przechowywanych w pliku PST. Poniższe kroki pokazują, jak uzyskać dostęp do kontaktów w pliku PST w języku C#.

Poniższy przykładowy kod pokazuje, jak wyodrębnić kontakty z pliku PST w języku C#.

// Załaduj plik PST programu Outlook
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Pobierz folder Kontakty
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Przejrzyj wszystkie kontakty w tym folderze
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Uzyskaj informacje kontaktowe
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Przesyłaj do MapiContact
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Wyświetl niektóre treści na ekranie
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Zapisz na dysku w formacie MSG
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Pozbądź się niedozwolonych znaków, których nie można użyć jako nazwy pliku
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Uzyskaj bezpłatną licencję API

Możesz wypróbować Aspose.Email for .NET za darmo, uzyskując tymczasową licencję.

Wniosek

W tym artykule nauczyłeś się, jak programowo odczytywać pliki PST w języku C# .NET. Ponadto widziałeś, jak czytać informacje o folderach, pobierać wiadomości e-mail i wyodrębniać kontakty z pliku PST w języku C#. Poza tym możesz dowiedzieć się więcej o Aspose.Email for .NET za pomocą dokumentacji. Możesz także dzielić się swoimi pytaniami lub zapytaniami na naszym forum.

Zobacz też