Per poter utilizzare Outlook è necessario disporre di un account di posta (Microsoft Exchange, POP o IMAP). L'account di posta è composto da un'oggetto di tipo Store che viene utilizzato per memorizzare i dati. Lo Store, a sua volta, è composto da cartelle e Item (come e-mail, contatti, appuntamenti, ecc). Anche un file archivio (file PST) è composto da un'oggetto di tipo Store. Per chiarire il concetto, si veda la seguente figura.
|
FIG 1 - Outlook Store |
In questo articolo verrà mostrato come, utilizzando C#, è possibile ottenere l'elenco dei file PST connessi ad Outlook.
Per poter interagire con gli oggetti di Outlook è necessario utilizzare, all'interno della nostra applicazione, il namespace Microsoft.Office.Interop.Outlook.
Una volta aggiunti i riferimenti a Microsoft.Office.Interop.Outlook, la prima operazione da effettuare è quella di creare un oggetto Outlook Application.
Outlook.Application olApp = new Outlook.Application();
Tale oggetto può essere utilizzato per diversi scopi, noi lo useremo per accedere agli altri oggetti di Outlook sottostanti.
Il nostro obiettivo è quello di accedere agli Store. Tale operazione è possibile attraverso l'oggetto NameSpace che contiene la sessione di collegamento ad Outlook
Outlook.NameSpace olNs=olApp.Session;
Outlook.Stores olStores=olNs.Stores;
A questo punto in olStores abbiamo tutti gli Store del profilo Outlook. Attraverso un ciclo For andiamo ad analizzare ciascun Store e verificare se si tratta di un file di dati (olStore.IsDataFileStore) e se la sua estensione è .PST (olStore.FilePath.ToString().ToUpper().EndsWith(".PST"). In caso affermativo il nome del file, comprensivo di path, verrà accodato ad una variabile stringa (pstList) che, al termine, conterrà l'elenco di tutti i file PST connessi ad Outlook.
for (int i = 1; i <= olStores.Count; i++){
olStore=olStores[i];
if(olStore.IsDataFileStore){ //se si tratta di un file di dati
if ((olStore.FilePath.ToString().ToUpper().EndsWith(".PST")) ){
count++;
pstList += String.Format("{0}. {1}{2}",count,olStore.FilePath,Environment.NewLine);
}
}
if (olStore !=null)
Marshal.ReleaseComObject(olStore);
}
Alla fine non resta che chiudere le sessioni e rilasciare gli oggetti.
if (olStores !=null)
Marshal.ReleaseComObject(olStores);
if (olStore !=null)
Marshal.ReleaseComObject(olStore);
if (olApp !=null)
Marshal.ReleaseComObject(olApp);
if (olNs != null)
Marshal.ReleaseComObject(olNs);
Per chi vuole può scaricare il codice sorgente dell'esempio dal seguente link.
DOWNLOAD