Leer archivos PST y recuperar información

Leer archivos PST y recuperar información

Aspose.Email para .NET ofrece una API para leer archivos PST de Microsoft Outlook. Puede cargar un archivo PST desde el disco o transmitirlo a una instancia de la PersonalStorage clase y obtener la información sobre su contenido, por ejemplo, carpetas, subcarpetas y mensajes. La API también ofrece la capacidad de incluir carpetas de búsqueda al recorrer los mensajes de las carpetas PST.

Cargar archivo PST

Un archivo PST de Outlook puede cargarse en una instancia de la PersonalStorage clase. El siguiente fragmento de código le muestra cómo cargar el archivo PST.

Mostrar información de carpetas

Después de cargar el archivo PST en el PersonalStorage clase, puedes obtener información sobre el nombre de visualización del archivo, la carpeta raíz, las subcarpetas y el recuento de mensajes. El siguiente fragmento de código muestra cómo mostrar el nombre del archivo PST, las carpetas y el número de mensajes en las carpetas.

Obtener solo carpetas definidas por el usuario

Los archivos PST/OST pueden contener carpetas creadas por un usuario. Aspose.Email brinda la posibilidad de acceder solo a carpetas definidas por el usuario mediante el PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser propiedad. Puedes establecer el PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser propiedad a true para obtener solo carpetas definidas por el usuario. El siguiente fragmento de código demuestra el uso de PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser para obtener carpetas definidas por el usuario.

Comprobar si la carpeta es predefinida

Al abrir e inspeccionar las carpetas dentro de un archivo PST (Personal Storage Table), puedes comprobar si cada carpeta es de un tipo predefinido o una subcarpeta de un tipo de carpeta predefinido, y obtener la información de cada carpeta.

El FolderInfo.GetPredefinedTypeel método (bool getForTopLevelParent) permite comprobar si una carpeta es de StandardIpmFolder. Si el parámetro getForTopLevelParent es true, el método devuelve un StandardIpmFolder valor enum para la carpeta padre de nivel superior. Esto determina si la carpeta actual es una subcarpeta de una carpeta predefinida. Si el parámetro getForTopLevelParent es false, devuelve un StandardIpmFolder valor enum para la carpeta actual.

El siguiente ejemplo de código muestra cómo implementar esta función en su proyecto:

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 información de la carpeta padre

El siguiente fragmento de código muestra cómo obtener información de la carpeta padre desde MessageInfo.

Obtener Subcarpeta por Ruta

El FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) Una sobrecarga del método le permitirá obtener una subcarpeta con el nombre especificado desde la carpeta PST actual.

El método toma los siguientes parámetros:

  • name - especifica el nombre de la subcarpeta a obtener.
  • ignoreCase - determina si la búsqueda del nombre de la subcarpeta debe ser sensible o insensible a mayúsculas. Si se establece en true, la búsqueda será insensible a mayúsculas; de lo contrario, será sensible a mayúsculas.
  • handlePathSeparator - especifica si el nombre de carpeta especificado debe tratarse como una ruta si contiene barras invertidas. Si se establece en true, el método interpretará el nombre de la carpeta como una ruta, intentando navegar a la subcarpeta usando la ruta. Si se establece en false, el método tratará el nombre de la carpeta como un nombre simple, buscando una subcarpeta con coincidencia exacta de nombre.

El siguiente ejemplo de código muestra cómo implementar este método en su proyecto:

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.

Canales RSS y Carpetas Buscables

Carpeta estándar de RSS Feeds en PersonalStorage

Aspose.Email permite obtener una referencia a la carpeta predefinida que contiene RSS feeds. Esto puede ser útil si deseas acceder y manipular programáticamente los RSS feeds almacenados en un archivo PST de Outlook. Asigna el valor de RssFeeds al StandardIpmFolder enum.

El siguiente ejemplo de código muestra cómo obtener una carpeta de RSS Feeds.

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

Para agregar una carpeta de RSS Feeds, use el siguiente fragmento de código:

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

Analizando carpetas buscables

Un PST/OST puede contener carpetas buscables además del tipo normal de carpetas. Aspose.Email proporciona el FolderKind enumerador para especificar los mensajes de esas carpetas de búsqueda con EnumerateFolders y GetSubFolders métodos. El siguiente fragmento de código muestra cómo analizar carpetas buscables.

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 recorrido de archivos PST

La API de recorrido permite extraer todos los elementos del PST tanto como sea posible, sin lanzar excepciones, incluso si algunos datos del archivo original están corruptos. Los siguientes pasos muestran cómo usar esta API.

Usar PersonalStorage constructor y Load método en lugar del método FromFile.

El constructor permite definir un método de devolución de llamada.

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

Las excepciones de carga y recorrido estarán disponibles a través del método de devolución de llamada.

El Load el método devuelve ’true’ si el archivo se ha cargado correctamente y es posible continuar el recorrido. Si el archivo está corrupto y no es posible el recorrido, se devuelve ‘false’.

if (currentPst.Load(inputStream))

Esto permite abrir y recorrer incluso archivos PST corruptos sin lanzar excepciones. Las excepciones y los elementos corruptos serán manejados por el método de devolución de llamada.

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 colores de categorías de ítems de archivos PST

Aspose.Email permite a los usuarios recuperar información de categorías, incluidos nombres y colores, de archivos PST. Los datos de categorías pueden extraerse y coincidir con elementos individuales del PST. Use los siguientes miembros de la API:

  • OutlookCategoryColor enum - Representa el color asociado a una categoría.
  • PstItemCategory clase - Proporciona propiedades para el nombre y el color de la categoría.
  • GetCategories método - Recupera una lista de categorías con sus nombres y colores.

Los siguientes ejemplos de código demuestran cómo recuperar todas las categorías disponibles de un archivo PST y asociarlas con un mensaje de correo electrónico específico.

Recuperar categorías disponibles del PST

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

Relacionar un nombre de categoría con su color

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");
        }
    }
}