Leggi i file PST di MS Outlook in C# .NET

PST (Personal Storage Table) è un formato di file di archiviazione utilizzato da diversi programmi Microsoft come MS Outlook, Exchange e Windows Messaging. I file PST sono in grado di memorizzare messaggi, contatti, calendari, eventi, ecc. In alcuni casi, potrebbe essere necessario analizzare un file PST ed estrarne i dati a livello di codice. A tal fine, questo articolo mostra come leggere i file PST di MS Outlook utilizzando C# .NET. In particolare, imparerai come estrarre le informazioni delle cartelle, leggere le email e recuperare i contatti da un file PST.

API .NET per leggere i file PST di Outlook

Aspose.Email for .NET è una potente API di elaborazione e-mail che ti consente di creare e inviare e-mail dall’interno di applicazioni .NET. Inoltre, supporta il lavoro con i formati di file di archiviazione e di posta elettronica più diffusi. Utilizzeremo questa API per leggere le informazioni, i messaggi e i contatti delle cartelle dai file PST. Puoi scaricare l’API o installarla tramite NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Leggere un file PST di Outlook in C# .NET

Di seguito sono riportati i passaggi per leggere un file PST ed estrarne le informazioni in C#.

Nell’esempio di codice seguente viene illustrato come analizzare un file PST e recuperare le informazioni delle cartelle.

// Carica file PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Ottieni le informazioni sulle cartelle
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Sfoglia ogni cartella per visualizzarne le informazioni
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("-----------------------------------");
}

Leggi le email da un file PST in C#

Le e-mail sono le principali entità archiviate nei file PST da MS Outlook. Vediamo quindi come leggere i messaggi di posta elettronica da un file PST in C#.

Nell’esempio di codice seguente viene illustrato come estrarre i messaggi da un file PST in C# .NET.

// Carica il file PST di Outlook
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Ottieni il formato di visualizzazione del file PST
Console.WriteLine("Display Format: " + pst.Format);

// Ottieni le informazioni sulle cartelle e sui messaggi
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Chiama il metodo ricorsivo per estrarre i file msg da ciascuna cartella
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Questo è un metodo ricorsivo per visualizzare il contenuto di una cartella
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Visualizza il nome della cartella
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Scorri tutti i messaggi in questa cartella
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Ottieni il messaggio nell'istanza MapiMessage
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Salva questo messaggio su disco in formato msg
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Salva questo messaggio per lo streaming in formato msg
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Chiama questo metodo in modo ricorsivo per ogni sottocartella
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Estrai i contatti da un file PST in C#

In alcuni casi, potrebbe essere necessario estrarre le informazioni sui contatti archiviate in un file PST. I passaggi seguenti illustrano come accedere ai contatti in un file PST in C#.

L’esempio di codice seguente mostra come estrarre i contatti da un file PST in C#.

// Carica il file PST di Outlook
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Ottieni la cartella Contatti
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Scorri tutti i contatti in questa cartella
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Ottieni le informazioni di contatto
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Trasmetti a MapiContact
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Visualizza alcuni contenuti sullo schermo
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Salva su disco in formato MSG
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Sbarazzati dei caratteri illegali che non possono essere utilizzati come nome di file
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Ottieni una licenza API gratuita

Puoi provare Aspose.Email per .NET gratuitamente ottenendo una licenza temporanea.

Conclusione

In questo articolo si è appreso come leggere i file PST a livello di codice in C# .NET. Inoltre, hai visto come leggere le informazioni sulle cartelle, recuperare e-mail ed estrarre contatti da un file PST in C#. Inoltre, puoi esplorare di più su Aspose.Email per .NET usando documentazione. Inoltre, puoi condividere le tue domande o richieste sul nostro forum.

Guarda anche