Visualizzazione post con etichetta item. Mostra tutti i post
Visualizzazione post con etichetta item. Mostra tutti i post

domenica 7 maggio 2017

C#: Elencare i file PST connessi ad Outlook

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.


Outlook Store
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