Leia arquivos PST do MS Outlook em C# .NET

PST (Personal Storage Table) é um formato de arquivo de armazenamento usado por diferentes programas da Microsoft, como MS Outlook, Exchange e Windows Messaging. Os arquivos PST são capazes de armazenar mensagens, contatos, calendários, eventos, etc. Em certos casos, pode ser necessário analisar um arquivo PST e extrair dados dele programaticamente. Para conseguir isso, este artigo mostra como ler arquivos PST do MS Outlook usando C# .NET. Particularmente, você aprenderá como extrair informações de pastas, ler e-mails e buscar contatos de um arquivo PST.

API .NET para ler arquivos PST do Outlook

Aspose.Email for .NET é uma poderosa API de processamento de e-mail que permite criar e enviar e-mails de dentro de aplicativos .NET. Além disso, ele suporta trabalhar com formatos populares de e-mail e arquivos de armazenamento. Usaremos esta API para ler as informações, mensagens e contatos das pastas de arquivos PST. Você pode baixar a API ou instalá-la via NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Ler um arquivo PST do Outlook em C# .NET

A seguir estão as etapas para ler um arquivo PST e extrair suas informações em C#.

O exemplo de código a seguir mostra como analisar um arquivo PST e buscar as informações das pastas.

// Carregar arquivo PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Obtenha as informações das pastas
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Navegue por cada pasta para exibir suas informações
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("-----------------------------------");
}

Leia e-mails de um arquivo PST em C#

Os e-mails são as principais entidades armazenadas em arquivos PST pelo MS Outlook. Então, vamos ver como ler mensagens de email de um arquivo PST em C#.

O exemplo de código a seguir mostra como extrair mensagens de um arquivo PST em C# .NET.

// Carregar o arquivo PST do Outlook
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Obtenha o formato de exibição do arquivo PST
Console.WriteLine("Display Format: " + pst.Format);

// Obtenha as informações de pastas e mensagens
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Chame o método recursivo para extrair arquivos msg de cada pasta
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Este é um método recursivo para exibir o conteúdo de uma pasta
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Exibir o nome da pasta
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Percorra todas as mensagens nesta pasta
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Obter a mensagem na instância MapiMessage
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Salve esta mensagem em disco no formato msg
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Salve esta mensagem para transmitir no formato msg
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Chame este método recursivamente para cada subpasta
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Extrair contatos de um arquivo PST em C#

Em certos casos, pode ser necessário extrair as informações dos contatos armazenadas em um arquivo PST. As etapas a seguir demonstram como acessar os contatos em um arquivo PST em C#.

O exemplo de código a seguir mostra como extrair contatos de um arquivo PST em C#.

// Carregar o arquivo PST do Outlook
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Obtenha a pasta de contatos
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Percorra todos os contatos nesta pasta
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Obtenha as informações de contato
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Transmitir para MapiContact
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Exibir alguns conteúdos na tela
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Salvar em disco no formato MSG
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Livre-se de caracteres ilegais que não podem ser usados como nome de arquivo
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Obtenha uma licença de API gratuita

Você pode experimentar o Aspose.Email for .NET gratuitamente obtendo uma licença temporária.

Conclusão

Neste artigo, você aprendeu a ler arquivos PST programaticamente em C# .NET. Além disso, você viu como ler informações de pastas, buscar emails e extrair contatos de um arquivo PST em C#. Além disso, você pode explorar mais sobre o Aspose.Email para .NET usando documentação. Além disso, você pode compartilhar suas perguntas ou dúvidas em nosso fórum.

Veja também