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
- Leggi un file PST in C#
- Leggi le email da un file PST
- Estrai 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#.
- Carica il file PST utilizzando il metodo PersonalStorage.FromFile().
- Ottieni la raccolta di cartelle in PST utilizzando il metodo PersonalStorage.RootFolder.GetSubFolders().
- Recupera le informazioni delle cartelle come nome, numero di elementi, ecc.
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#.
- Carica il file PST utilizzando il metodo PersonalStorage.FromFile().
- Accedi alla cartella principale utilizzando la proprietà PersonalStorage.RootFolder.
- Ottieni la raccolta dei messaggi utilizzando il metodo FolderInfo.GetContents().
- Scorri i messaggi nella raccolta e leggi i campi di ogni messaggio.
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#.
- Carica il file PST utilizzando il metodo PersonalStorage.FromFile().
- Ottieni il riferimento della cartella dei contatti usando il metodo PersonalStorage.RootFolder.GetSubFolder(“Contacts”).
- Ottieni la raccolta di contatti utilizzando il metodo FolderInfo.GetContents().
- Scorri la raccolta dei contatti e leggi ogni contatto o salvalo.
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.