È possibile leggere un file .PST usando C#? Mi piacerebbe farlo come applicazione standalone, non come addin di Outlook (se possibile).Posso leggere un file PST di Outlook (2003/2007) in C#?
Se hanno visto otherSOquestionssimilar a questa menzione MailNavigator ma sto cercando di farlo a livello di codice in C#.
Ho visto lo spazio dei nomi Microsoft.Office.Interop.Outlook ma sembra essere solo per i componenti aggiuntivi di Outlook. LibPST sembra essere in grado di leggere i file PST, ma questo è in C (mi dispiace Joel, non ho learn C before graduating).
Qualsiasi aiuto sarebbe molto apprezzato, grazie!
EDIT:
Grazie a tutti per le risposte! Ho accettato la risposta di Matthew Ruston come risposta perché alla fine mi ha portato al codice che stavo cercando. Ecco un semplice esempio di quello che ho avuto modo di lavorare (Sarà necessario aggiungere un riferimento 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: Questo codice si presuppone che Outlook è installato e già configurato per l'utente corrente. Utilizza il profilo predefinito (puoi modificare il profilo predefinito andando a Mail nel Pannello di controllo). Un importante miglioramento di questo codice potrebbe essere quello di creare un profilo temporaneo da utilizzare al posto del Default, quindi distruggerlo una volta completato.
Non avevo idea che i AddStores e l'elenco dei Negozi esistessero nell'API Outlook. Buon post! –
Mi manca qualcosa? Perché non riesco ad accedere alla collezione Stores dell'outlook NS? Non è nell'intelligenza. –
Hai incluso "l'uso di Microsoft.Office.Interop.Outlook;" nel tuo codice? –