Lire les fichiers MS Outlook PST en C# .NET

PST (Personal Storage Table) est un format de fichier de stockage utilisé par différents programmes Microsoft tels que MS Outlook, Exchange et Windows Messaging. Les fichiers PST sont capables de stocker des messages, des contacts, des calendriers, des événements, etc. Dans certains cas, vous devrez peut-être analyser un fichier PST et en extraire des données par programmation. Pour y parvenir, cet article montre comment lire les fichiers MS Outlook PST à l’aide de C# .NET. En particulier, vous apprendrez à extraire les informations des dossiers, à lire les e-mails et à récupérer les contacts à partir d’un fichier PST.

API .NET pour lire les fichiers Outlook PST

Aspose.Email for .NET est une puissante API de traitement des e-mails qui vous permet de créer et d’envoyer des e-mails à partir d’applications .NET. En outre, il prend en charge le travail avec les formats de fichiers de messagerie et de stockage les plus courants. Nous utiliserons cette API pour lire les informations, les messages et les contacts des dossiers à partir de fichiers PST. Vous pouvez soit télécharger l’API ou l’installer via NuGet.

PM> Install-Package Aspose.Email -Version 22.3.0

Lire un fichier Outlook PST en C# .NET

Voici les étapes pour lire un fichier PST et extraire ses informations en C#.

L’exemple de code suivant montre comment analyser un fichier PST et récupérer les informations des dossiers.

// Charger le fichier PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Obtenir les informations des dossiers
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Parcourez chaque dossier pour afficher ses informations
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("-----------------------------------");
}

Lire des e-mails à partir d’un fichier PST en C#

Les e-mails sont les principales entités stockées dans les fichiers PST par MS Outlook. Voyons donc comment lire les e-mails à partir d’un fichier PST en C#.

L’exemple de code suivant montre comment extraire des messages d’un fichier PST dans C# .NET.

// Charger le fichier Outlook PST
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// Obtenir le format d'affichage du fichier PST
Console.WriteLine("Display Format: " + pst.Format);

// Obtenir les informations sur les dossiers et les messages
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Appelez la méthode récursive pour extraire les fichiers msg de chaque dossier
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Il s'agit d'une méthode récursive pour afficher le contenu d'un dossier
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Afficher le nom du dossier
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Parcourez tous les messages de ce dossier
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Obtenir le message dans l'instance MapiMessage
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Enregistrez ce message sur le disque au format msg
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // Enregistrez ce message pour le diffuser au format msg
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Appelez cette méthode de manière récursive pour chaque sous-dossier
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Extraire les contacts d’un fichier PST en C#

Dans certains cas, vous devrez peut-être extraire les informations des contacts stockées dans un fichier PST. Les étapes suivantes montrent comment accéder aux contacts dans un fichier PST en C#.

L’exemple de code suivant montre comment extraire des contacts d’un fichier PST en C#.

// Charger le fichier Outlook PST
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Obtenir le dossier Contacts
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Parcourez tous les contacts de ce dossier
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // Obtenir les coordonnées
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // Diffuser sur MapiContact
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Afficher certains contenus à l'écran
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // Enregistrer sur disque au format MSG
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Débarrassez-vous des caractères illégaux qui ne peuvent pas être utilisés comme nom de fichier
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Obtenez une licence API gratuite

Vous pouvez essayer gratuitement Aspose.Email for .NET en obtenant une licence temporaire.

Conclusion

Dans cet article, vous avez appris à lire des fichiers PST par programmation dans C# .NET. De plus, vous avez vu comment lire les informations de dossier, récupérer des e-mails et extraire des contacts d’un fichier PST en C#. En outre, vous pouvez en savoir plus sur Aspose.Email for .NET en utilisant documentation. Vous pouvez également partager vos questions ou requêtes sur notre forum.

Voir également