Ler Arquivos PST e Recuperar Informações

Ler Arquivos PST e Recuperar Informações

Aspose.Email para .NET fornece uma API para leitura de arquivos PST do Microsoft Outlook. Você pode carregar um arquivo PST do disco ou de um fluxo em uma instância da PersonalStorage classe e obter informações sobre seu conteúdo, por exemplo, pastas, subpastas e mensagens. A API também oferece a capacidade de incluir pastas de pesquisa ao percorrer mensagens das pastas PST.

Carregar Arquivo PST

Um arquivo PST do Outlook pode ser carregado em uma instância da PersonalStorage classe. O trecho de código a seguir mostra como carregar o arquivo PST.

Exibir Informações das Pastas

Após carregar o arquivo PST no PersonalStorage classe, você pode obter informações sobre o nome de exibição do arquivo, pasta raiz, subpastas e contagem de mensagens. O trecho de código a seguir mostra como exibir o nome do arquivo PST, pastas e o número de mensagens nas pastas.

Obter Apenas Pastas Definidas pelo Usuário

Arquivos PST/OST podem conter pastas criadas por um usuário. O Aspose.Email fornece a capacidade de acessar apenas pastas definidas pelo usuário usando o PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser propriedade. Você pode definir o PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser propriedade para true para obter apenas pastas definidas pelo usuário. O fragmento de código a seguir demonstra o uso de PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser para obter pastas definidas pelo usuário.

Verificar se a Pasta é Predefinida

Ao abrir e inspecionar as pastas dentro de um arquivo PST (Personal Storage Table), você pode verificar se cada pasta é de um tipo predefinido ou uma subpasta de um tipo predefinido, e obter informações sobre cada pasta.

O FolderInfo.GetPredefinedTypemétodo (bool getForTopLevelParent) permite verificar se uma pasta é de StandardIpmFolder. Se o parâmetro getForTopLevelParent for true, o método retorna um StandardIpmFolder valor enum para a pasta pai de nível superior. Isso determina se a pasta atual é uma subpasta de uma pasta predefinida. Se o parâmetro getForTopLevelParent for false, ele retorna um StandardIpmFolder valor enum para a pasta atual.

O exemplo de código a seguir mostra como implementar esse recurso em seu projeto:

PersonalStorage.FromFile("my.pst"))
        {
            FolderInfoCollection folders = pst.RootFolder.GetSubFolders();

            foreach (FolderInfo folder in folders)
            {
                Console.WriteLine($"Folder: {folder.DisplayName}");
                Console.WriteLine($"Is predefined: {folder.GetPredefinedType(false) != StandardIpmFolder.Unspecified}");
                Console.WriteLine("-----------------------------------");
            }
        }

Recuperar Informações da Pasta Pai

O fragmento de código a seguir mostra como recuperar informações da pasta pai de MessageInfo.

Recuperar Subpasta por Caminho

O FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) A sobrecarga do método permitirá que você recupere uma subpasta com o nome especificado da pasta PST atual.

O método recebe os seguintes parâmetros:

  • name - especifica o nome da subpasta a ser recuperada.
  • ignoreCase - determina se a busca pelo nome da subpasta deve ser sensível a maiúsculas/minúsculas ou não. Se definido como true, a busca será insensível a maiúsculas, caso contrário, será sensível.
  • handlePathSeparator - especifica se o nome da pasta especificado deve ser tratado como um caminho caso contenha barras invertidas. Se definido como true, o método interpretará o nome da pasta como um caminho, tentando navegar até a subpasta usando esse caminho. Se definido como false, o método tratará o nome da pasta como um nome simples, procurando uma subpasta com correspondência exata de nome.

O exemplo de código a seguir demonstra como implementar esse método em seu projeto:

var folder = pst.RootFolder.GetSubFolder(@"Inbox\Reports\Jan", true, true);
In this sample, the method will return a Jan named folder that is located at the Inbox\Reports\ path relative to the root folder.

Feeds RSS e Pastas Pesquisáveis

Pasta Padrão de RSS Feeds no PersonalStorage

Aspose.Email possibilita recuperar uma referência à pasta predefinida que contém RSS feeds. Isso pode ser útil se você quiser acessar e manipular programaticamente os RSS feeds armazenados em um arquivo PST do Outlook. Atribua o valor de RssFeeds ao StandardIpmFolder enum.

O exemplo de código a seguir mostra como obter uma pasta de RSS Feeds.

using (var pst = PersonalStorage.FromFile("my.pst", false))
{
    var rssFolder = pst.GetPredefinedFolder(StandardIpmFolder.RssFeeds);
}

Para adicionar uma pasta de RSS Feeds, use o seguinte trecho de código:

using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
    var rssFolder = pst.CreatePredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}

Analisando Pastas Pesquisáveis

Um PST/OST pode conter pastas pesquisáveis além do tipo normal de pastas. Aspose.Email fornece o FolderKind enumerador para especificar as mensagens de tais pastas de pesquisa com EnumerateFolders e GetSubFolders métodos. O trecho de código a seguir mostra como analisar pastas pesquisáveis.

using (PersonalStorage pst = PersonalStorage.FromFile("my.pst"))
        {
            FolderInfoCollection folders = pst.RootFolder.GetSubFolders(FolderKind.Search | FolderKind.Normal);

            // Browse through each folder to display folder name and number of messages
            foreach (FolderInfo folder in folders)
            {
                Console.WriteLine($"Folder: {folder.DisplayName}");

                FolderInfoCollection subFolders = folder.GetSubFolders(FolderKind.Search | FolderKind.Normal);
                foreach (FolderInfo subFolder in subFolders)
                {
                    Console.WriteLine($"Sub-folder: {subFolder.DisplayName}");
                }
            }
        }

API de Traversal de Arquivo PST

A API de travessia permite extrair todos os itens PST tanto quanto possível, sem lançar exceções, mesmo se alguns dados do arquivo original estiverem corrompidos. Os passos a seguir mostram como usar essa API.

Usar PersonalStorage construtor e Load método em vez do método FromFile.

O construtor permite definir um método de callback.

using (var currentPst = new PersonalStorage((exception, itemId) => { /* Exception handling  code. */ }))

Exceções de carregamento e navegação estarão disponíveis através do método de callback.

O Load o método retorna ’true’ se o arquivo foi carregado com sucesso e a navegação adicional for possível. Se um arquivo estiver corrompido e a navegação não for possível, retorna ‘false’.

if (currentPst.Load(inputStream))

Isso permite abrir e percorrer até arquivos PST corrompidos sem lançar exceções. Exceções e itens corrompidos serão tratados pelo método de callback.

using (PersonalStorage pst = new PersonalStorage((exception, itemId) => { /* Exception handling  code. */ }))
{
    if (pst.Load(@"test.pst"))
    {
        GetAllMessages(pst, pst.RootFolder);
    }
}

private static void GetAllMessages(PersonalStorage pst, FolderInfo folder)
{
    foreach (var messageEntryId in folder.EnumerateMessagesEntryId())
    {
        MapiMessage message = pst.ExtractMessage(messageEntryId);
    }
    foreach (var subFolder in folder.GetSubFolders())
    {
        GetAllMessages(pst, subFolder);
    }
}

Recuperar Cores de Categorias de Itens de PST

O Aspose.Email permite que os usuários recuperem informações de categorias, incluindo nomes e cores, de arquivos PST. Dados de categoria podem ser extraídos e combinados com itens individuais do PST. Use os seguintes membros da API:

Os exemplos de código a seguir demonstram como recuperar todas as categorias disponíveis de um arquivo PST e corresponder aquelas associadas a uma mensagem de e‑mail específica.

Recuperar Categorias Disponíveis do PST

using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
   var categories = pst.GetCategories();
   
   foreach(var category in categories)
   {
       Console.WriteLine(category);
   }
}

Corresponder um Nome de Categoria à sua Cor

using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
    // Get all categories from the PST
    var availableCategories = pst.GetCategories();
    
    // Extract a message from the PST and retrieve the list of category names for the message
    var messageCategoryList = FollowUpManager.GetCategories(pst.ExtractMessage(messageInfo));
    
    // Iterate through each category in the message and match it with the PST category list
    foreach (var messageCategory in messageCategoryList)
    {
        var category = availableCategories.Find(c => c.Name.Equals(messageCategory, StringComparison.OrdinalIgnoreCase));

        if (category != null)
        {
            // Print the category name and its associated color
            Console.WriteLine(category);
        }
        else
        {
            Console.WriteLine($"Category: {messageCategory}, Color: Not found");
        }
    }
}