Leer archivos PST de MS Outlook en C# .NET

PST (Tabla de almacenamiento personal) es un formato de archivo de almacenamiento que utilizan diferentes programas de Microsoft, como MS Outlook, Exchange y Windows Messaging. Los archivos PST son capaces de almacenar mensajes, contactos, calendarios, eventos, etc. En ciertos casos, es posible que necesite analizar un archivo PST y extraer datos de él mediante programación. Para lograrlo, este artículo muestra cómo leer archivos PST de MS Outlook usando C# .NET. En particular, aprenderá cómo extraer información de carpetas, leer correos electrónicos y obtener contactos de un archivo PST.

.NET API para leer archivos PST de Outlook

Aspose.Email for .NET es una poderosa API de procesamiento de correo electrónico que le permite crear y enviar correos electrónicos desde aplicaciones .NET. Además, admite trabajar con formatos populares de correo electrónico y archivos de almacenamiento. Usaremos esta API para leer la información, los mensajes y los contactos de las carpetas de los archivos PST. Puede descargar la API o instalarla a través de NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Leer un archivo PST de Outlook en C# .NET

Los siguientes son los pasos para leer un archivo PST y extraer su información en C#.

El siguiente ejemplo de código muestra cómo analizar un archivo PST y obtener la información de las carpetas.

// Cargar archivo PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Obtener la información de las carpetas
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Navega a través de cada carpeta para mostrar su información.
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("-----------------------------------");
}

Leer correos electrónicos de un archivo PST en C#

Los correos electrónicos son las principales entidades que MS Outlook almacena en archivos PST. Así que veamos cómo leer mensajes de correo electrónico desde un archivo PST en C#.

El siguiente ejemplo de código muestra cómo extraer mensajes de un archivo PST en C# .NET.

// Cargue el archivo PST de Outlook
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Obtener el formato de visualización del archivo PST
Console.WriteLine("Display Format: " + pst.Format);

// Obtener la información de carpetas y mensajes
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Llame al método recursivo para extraer archivos msg de cada carpeta
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Este es un método recursivo para mostrar el contenido de una carpeta
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Mostrar el nombre de la carpeta
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Recorre todos los mensajes de esta carpeta
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Obtenga el mensaje en la instancia de MapiMessage
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Guarde este mensaje en el disco en formato msg
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Guarde este mensaje para transmitir en formato de mensaje
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

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

Extraer contactos de un archivo PST en C#

En ciertos casos, es posible que deba extraer la información de los contactos almacenada en un archivo PST. Los siguientes pasos demuestran cómo acceder a los contactos en un archivo PST en C#.

El siguiente ejemplo de código muestra cómo extraer contactos de un archivo PST en C#.

// Cargue el archivo PST de Outlook
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Obtener la carpeta de Contactos
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Recorra todos los contactos en esta carpeta
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Obtenga la información de contacto
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Enviar a MapiContacto
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Mostrar algunos contenidos en pantalla
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Guardar en disco en formato MSG
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Deshágase de los caracteres ilegales que no se pueden usar como nombre de archivo
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Obtenga una licencia de API gratuita

Puede probar Aspose.Email for .NET de forma gratuita obteniendo una licencia temporal.

Conclusión

En este artículo, ha aprendido a leer archivos PST mediante programación en C# .NET. Además, ha visto cómo leer información de carpetas, buscar correos electrónicos y extraer contactos de un archivo PST en C#. Además, puede explorar más sobre Aspose.Email for .NET usando documentación. Además, puedes compartir tus dudas o consultas en nuestro foro.

Ver también