¿Es posible leer un archivo .PST usando C#? Me gustaría hacer esto como una aplicación independiente, no como un complemento de Outlook (si es posible).¿Puedo leer un archivo PST de Outlook (2003/2007) en C#?
Si han visto otherSOquestionssimilar a esta mención MailNavigator pero estoy en busca de hacer esto mediante programación en C#.
He consultado el espacio de nombres Microsoft.Office.Interop.Outlook pero parece ser solo para complementos de Outlook. LibPST parece ser capaz de leer archivos PST, pero esto está en C (lo siento Joel, no lo hice learn C before graduating).
¡Cualquier ayuda sería muy apreciada, gracias!
EDIT:
Gracias a todos por las respuestas! Acepté la respuesta de Matthew Ruston como la respuesta porque finalmente me llevó al código que estaba buscando. Aquí está un ejemplo sencillo de lo que tengo que trabajar (Usted tendrá que añadir una referencia a Microsoft.Office.Interop.Outlook):
using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Outlook;
namespace PSTReader {
class Program {
static void Main() {
try {
IEnumerable<MailItem> mailItems = readPst(@"C:\temp\PST\Test.pst", "Test PST");
foreach (MailItem mailItem in mailItems) {
Console.WriteLine(mailItem.SenderName + " - " + mailItem.Subject);
}
} catch (System.Exception ex) {
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private static IEnumerable<MailItem> readPst(string pstFilePath, string pstName) {
List<MailItem> mailItems = new List<MailItem>();
Application app = new Application();
NameSpace outlookNs = app.GetNamespace("MAPI");
// Add PST file (Outlook Data File) to Default Profile
outlookNs.AddStore(pstFilePath);
MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();
// Traverse through all folders in the PST file
// TODO: This is not recursive, refactor
Folders subFolders = rootFolder.Folders;
foreach (Folder folder in subFolders) {
Items items = folder.Items;
foreach (object item in items) {
if (item is MailItem) {
MailItem mailItem = item as MailItem;
mailItems.Add(mailItem);
}
}
}
// Remove PST file from Default Profile
outlookNs.RemoveStore(rootFolder);
return mailItems;
}
}
}
Nota: Este código se supone que Outlook está instalado y ya configurado para el usuario actual. Utiliza el Perfil predeterminado (puede editar el perfil predeterminado yendo a Correo en el Panel de control). Una mejora importante en este código sería crear un perfil temporal para usar en lugar del predeterminado, y luego destruirlo una vez que se haya completado.
no tenía ni idea de que los AddStores y la lista de tiendas que existiera en la API de Outlook. ¡Buen post! –
¿Me estoy perdiendo algo? ¿Por qué no puedo acceder a la colección Stores de outlookNS? No está en intellisense. –
¿Incluyó 'using Microsoft.Office.Interop.Outlook;' en tu código? –