
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
- Ouverture de fichiers au format OLM
- Obtention des dossiers
- Liste des emails
- Extraction des emails
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 :
en utilisant le constructeur
en utilisant la méthode statique FromFile
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.