Läs MS Outlook PST-filer i C# .NET

PST (Personal Storage Table) är ett lagringsfilformat som används av olika Microsoft-program som MS Outlook, Exchange och Windows Messaging. PST-filer kan lagra meddelanden, kontakter, kalendrar, händelser, etc. I vissa fall kan du behöva analysera en PST-fil och extrahera data från den programmatiskt. För att uppnå det visar den här artikeln hur man läser MS Outlook PST-filer med C# .NET. I synnerhet kommer du att lära dig hur du extraherar mappars information, läser e-postmeddelanden och hämtar kontakter från en PST-fil.

.NET API för att läsa Outlook PST-filer

Aspose.Email for .NET är ett kraftfullt e-postbearbetnings-API som låter dig skapa och skicka e-postmeddelanden från .NET-applikationer. Dessutom stöder den att arbeta med populära e-post- och lagringsfilformat. Vi kommer att använda detta API för att läsa mappars information, meddelanden och kontakter från PST-filer. Du kan antingen ladda ner API:et eller installera det via NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Läs en Outlook PST-fil i C# .NET

Följande är stegen för att läsa en PST-fil och extrahera dess information i C#.

Följande kodexempel visar hur man analyserar en PST-fil och hämtar mapparinformation.

// Ladda PST-fil
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Få information om mapparna
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Bläddra igenom varje mapp för att visa dess information
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("-----------------------------------");
}

Läs e-postmeddelanden från en PST-fil i C#

E-post är de viktigaste enheterna som lagras i PST-filer av MS Outlook. Så låt oss se hur man läser e-postmeddelanden från en PST-fil i C#.

Följande kodexempel visar hur man extraherar meddelanden från en PST-fil i C# .NET.

// Ladda Outlook PST-filen
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Hämta visningsformatet för PST-filen
Console.WriteLine("Display Format: " + pst.Format);

// Få information om mappar och meddelanden
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Anropa den rekursiva metoden för att extrahera msg-filer från varje mapp
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Detta är en rekursiv metod för att visa innehållet i en mapp
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Visa mappnamnet
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Gå igenom alla meddelanden i den här mappen
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Hämta meddelandet i MapiMessage-instansen
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Spara detta meddelande på disk i msg-format
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Spara detta meddelande för att streama i msg-format
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Anropa denna metod rekursivt för varje undermapp
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Extrahera kontakter från en PST-fil i C#

I vissa fall kan du behöva extrahera kontakternas information lagrad i en PST-fil. Följande steg visar hur du kommer åt kontakterna i en PST-fil i C#.

Följande kodexempel visar hur man extraherar kontakter från en PST-fil i C#.

// Ladda Outlook PST-filen
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Hämta mappen Kontakter
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Gå igenom alla kontakter i den här mappen
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Få kontaktinformationen
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Casta till MapiContact
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Visa en del innehåll på skärmen
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Spara på disk i MSG-format
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Bli av med olagliga tecken som inte kan användas som filnamn
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Skaffa en gratis API-licens

Du kan prova Aspose.Email för .NET gratis genom att skaffa en tillfällig licens.

Slutsats

I den här artikeln har du lärt dig hur du läser PST-filer programmatiskt i C# .NET. Dessutom har du sett hur du läser mappinformation, hämtar e-postmeddelanden och extraherar kontakter från en PST-fil i C#. Dessutom kan du utforska mer om Aspose.Email för .NET med hjälp av dokumentation. Du kan också dela dina frågor eller frågor på vårt forum.

Se även