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
- Leer un archivo PST en C#
- Leer correos electrónicos desde un archivo PST
- Extraer 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#.
- Cargue el archivo PST utilizando el método PersonalStorage.FromFile().
- Obtenga la colección de carpetas en PST usando el método PersonalStorage.RootFolder.GetSubFolders().
- Recuperar la información de las carpetas como nombre, número de elementos, etc.
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#.
- Cargue el archivo PST utilizando el método PersonalStorage.FromFile().
- Acceda a la carpeta raíz usando la propiedad PersonalStorage.RootFolder.
- Obtenga la recopilación de mensajes utilizando el método FolderInfo.GetContents().
- Recorra los mensajes de la colección y lea los campos de cada mensaje.
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#.
- Cargue el archivo PST utilizando el método PersonalStorage.FromFile().
- Obtenga la referencia de la carpeta de contactos usando el método PersonalStorage.RootFolder.GetSubFolder(“Contacts”).
- Obtenga una colección de contactos usando el método FolderInfo.GetContents().
- Recorra la colección de contactos y lea cada contacto o guárdelo.
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.