Lire les fichiers OLM de MS Outlook en C# .NET

OLM est un format de fichier que Microsoft Outlook pour Mac utilise pour stocker des données locales. OLM contient des données locales telles que des emails, des pièces jointes, des notes, des données de calendrier, des contacts, des tâches, de l’historique, etc. Les fichiers OLM sont utilisés par Outlook pour Mac. Outlook pour Windows ne peut pas y accéder ni les ouvrir. La version d’Outlook pour Windows ne prend en charge que le format de fichier PST pour stocker des données. Dans cet article, nous allons examiner comment ouvrir et lire des fichiers au format OLM à partir d’applications C#.

API C# .NET pour lire des fichiers OLM

Aspose.Email pour .NET est une API robuste qui fournit un éventail de fonctionnalités pour mettre en œuvre des applications de messagerie. De plus, elle permet de lire des fichiers OLM et d’autres formats de stockage de mails tels que MBOX, PST/OST. Vous pouvez soit installer la bibliothèque via NuGet, soit télécharger sa DLL.

PM> Install-Package Aspose.Email

Ouverture de fichiers au format OLM

L’API Aspose.Email propose deux façons d’ouvrir des fichiers au format OLM :

Il existe des différences de comportement entre ces méthodes. Voir la section ci-dessous.

Ouverture de fichier par le constructeur

Pour ouvrir un fichier, vous devez appeler le constructeur de la classe OlmStorage et passer le nom complet du fichier ou un flux comme argument :

var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);

Ouverture de fichier en utilisant la méthode statique FromFile

Pour ouvrir un fichier, vous devez utiliser la méthode statique FromFile et passer le nom complet du fichier ou un flux comme argument :

var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);

Obtention des dossiers

Après avoir ouvert le fichier en utilisant le constructeur, la propriété FolderHierarchy sera accessible. Elle renvoie une liste de répertoires qui existent dans le fichier OLM. Chaque objet de la classe OlmFolder de la liste a une propriété SubFolders, qui renvoie une liste de sous-dossiers. Ainsi, nous avons accès à tous les répertoires dans OLM.

L’exemple ci-dessous affiche la liste de tous les dossiers dans un ordre hiérarchique :

using (var olm = new OlmStorage(fileName))
{
PrintAllFolders(olm.FolderHierarchy, string.Empty);
}
private void PrintAllFolders(List<OlmFolder> folderHierarchy, string indent)
{
foreach (var folder in folderHierarchy)
{
Console.WriteLine($"{indent}{folder.Name}");
PrintAllFolders(folder.SubFolders, indent+"-");
}
}

Si vous ouvrez le fichier en utilisant la méthode FromFile, par défaut la propriété FolderHierarchy ne sera pas initialisée et renverra null. Dans ce cas, il est nécessaire d’appeler explicitement la méthode GetFolders :

using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}

De plus, il est possible d’obtenir n’importe quel dossier par son nom. Pour ce faire, vous devez :

  • appeler la méthode GetFolder

  • passer le nom du dossier comme premier argument et la valeur, qui indique s’il faut ignorer la sensibilité à la casse lors de la recherche d’un dossier, comme deuxième paramètre.

using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}

Liste des emails

La classe OlmFolder, qui représente un dossier, a les méthodes suivantes pour obtenir la liste des emails :

  • EnumerateMessages implémente l’itération des emails dans un dossier. Dans ce cas, chaque itération renvoie un objet OlmMessageInfo, qui fournit des informations courtes sur l’email.

  • EnumerateMapiMessages implémente également l’itération des emails dans un dossier, mais dans ce cas, chaque itération renvoie un objet MapiMessage, qui représente l’email lui-même, avec toutes ses propriétés.

Utilisation de la méthode EnumerateMessages

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}

Utilisation de la méthode EnumerateMapiMessages

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var msg in folder.EnumerateMapiMessages())
{
// save message in MSG format
msg.Save($"{msg.Subject}.msg");
}
}

Autres propriétés utiles

De plus, la classe OlmFolder a les propriétés HasMessages et MessageCount, qui renvoient la présence de messages dans le dossier et leur nombre :

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}

Extraction des emails

La classe OlmStorage a la méthode ExtractMapiMessage, qui permet d’extraire un email. Cette méthode reçoit un objet OlmMessageInfo.

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
if (messageInfo.Date == DateTime.Today)
{
// Extracts today's messages form Inbox
var msg = olm.ExtractMapiMessage(messageInfo);
}
}
}

Conclusion

Dans cet article, vous avez appris comment lire des fichiers OLM en C#. Vous avez vu les moyens d’obtenir une liste de dossiers et d’extraire des messages du fichier OLM. De plus, vous pouvez en savoir plus sur Aspose.Email pour .NET en consultant la documentation. Vous pouvez également partager vos questions ou demandes dans notre forum.

Voir aussi