La migration des données de messagerie depuis Outlook pour Mac (OLM) vers des formats largement pris en charge tels que MBOX (pour les boîtes aux lettres Thunderbird / Unix) et PST (Outlook pour Windows) est une tâche courante lors du passage d’une plateforme à une autre. Microsoft Outlook pour Mac utilise le format OLM (Outlook for Mac Data File) pour stocker les e‑mails, les contacts, les calendriers et d’autres éléments. Cependant, la migration de ces données vers des environnements basés sur Windows ou d’autres clients de messagerie nécessite souvent de convertir les fichiers OLM en formats universellement pris en charge comme le MBOX (utilisé par des clients tels que Thunderbird et Apple Mail) ou le PST (Outlook Personal Storage Table pour Windows).
Dans cet article, nous vous montrerons comment convertir des fichiers OLM en formats PST et MBOX en C# en utilisant Aspose.Email for .NET, une API puissante qui simplifie les tâches complexes de migration d’e-mails de manière programmatique. Vous apprendrez comment ouvrir des fichiers OLM, extraire les messages, préserver la hiérarchie des dossiers et générer des archives d’e-mails portables pour plusieurs plates‑formes.
Utilisation d’Aspose.Email for .NET pour la conversion
[Aspose.Email for .NET][] offre des fonctionnalités complètes pour travailler avec divers formats de courrier électronique, y compris OLM, MBOX et PST. Il simplifie les tâches de conversion complexes grâce à son API intuitive et à sa documentation exhaustive. Ci-dessous, nous parcourrons les étapes pour convertir OLM en MBOX et PST en utilisant C#.
Pour commencer, installez le package NuGet Aspose.Email dans votre projet .NET :
Install-Package Aspose.Email
Ce package comprend toutes les classes nécessaires pour gérer les fichiers OLM, MBOX et PST.
Convertir OLM en MBOX
Le format MBOX stocke les messages électroniques sous forme d’entrées MIME concaténées, couramment utilisé par les clients de messagerie open source. Ci‑dessous, un exemple de code simple mais efficace pour convertir tous les messages d’un dossier OLM en un fichier MBOX. Il utilise les membres d’API suivants :
- OlmStorage.FromFile(…) - Ouvre une archive OLM et vous donne accès à son arborescence de dossiers et à ses éléments. Vous pouvez l’utiliser pour énumérer les dossiers ou extraire des messages d’un fichier OLM.
- GetFolder(string name, bool ignoreCase) - Renvoie un OlmFolder pour le nom de dossier demandé.
- OlmFolder.EnumerateMapiMessages() - Itère les éléments MapiMessage dans ce dossier.
- MapiMessage.ToMailMessage(MailConversionOptions) - Convertit un MapiMessage en MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - Écrit un MailMessage MIME dans le flux MBOX.
Étapes
- Définissez les chemins de fichier pour le fichier OLM d’entrée et le fichier MBOX de sortie.
- Ouvrez le fichier OLM en utilisant
OlmStorage.FromFile. - Créez un écrivain MBOX en utilisant
MboxrdStorageWriteravec le chemin de sortie spécifié et les options. - Accédez au dossier « Inbox » du fichier OLM en utilisant une recherche insensible à la casse.
- Parcourez tous les messages MAPI du dossier « Inbox ».
- Convertissez chaque message MAPI en un objet
MailMessagestandard. - Écrivez chaque message converti dans le fichier MBOX.
Exemple de code
var olmPath = @"C:\data\archive.olm";
var mboxPath = @"C:\data\output.mbox";
// Load OLM file using OlmStorage
using (var olm = OlmStorage.FromFile(olmPath))
using (var mboxWriter = new MboxrdStorageWriter(mboxPath, new MboxSaveOptions()))
{
// Get the folder (case-insensitive example)
var inbox = olm.GetFolder("Inbox", true);
// Iterate MAPI messages (returns MapiMessage objects)
foreach (MapiMessage mapi in inbox.EnumerateMapiMessages())
{
// Convert to MailMessage and write to MBOX
var mail = mapi.ToMailMessage(new MailConversionOptions());
mboxWriter.WriteMessage(mail);
}
}
Remarque :
Si vous souhaitez un MBOX par dossier, créez un rédacteur distinct pour chaque dossier OLM.
Si vous préférez une archive unique, réutilisez une instance de MboxrdStorageWriter et appelez WriteMessage de façon répétée comme indiqué dans l’exemple de code ci‑dessus.
Convertir OLM en PST
La conversion d’OLM en PST nécessite souvent non seulement la copie des messages, mais aussi la recréation de la hiérarchie des dossiers. L’exemple de code ci‑dessous montre comment convertir et copier la structure de dossiers ainsi que les messages d’un fichier d’archive Outlook OLM vers un fichier PST Unicode en utilisant Aspose.Email for .NET.
Membres clés
- PersonalStorage.Create(path, FileFormatVersion.Unicode) – Crée un nouveau fichier PST Unicode et renvoie une instance de PersonalStorage. Utilisez PersonalStorage.Load(…) pour ouvrir des PST existants. La classe PersonalStorage est le point d’entrée pour travailler avec les fichiers PST.
- PersonalStorage.RootFolder – Vous donne le dossier racine FolderInfo du PST. Utilisez FolderInfo.AddSubFolder(name) pour créer des sous‑dossiers. FolderInfo.GetSubFolders() renvoie les enfants afin que vous puissiez vérifier si un dossier portant le même nom existe déjà.
- OlmStorage.GetFolders() – Retourne la collection de niveau supérieur OlmFolder (la hiérarchie des dossiers OLM). La propriété OlmFolder.SubFolders contient les enfants (vous permettant de descendre récursivement).
- OlmFolder.EnumerateMapiMessages() – Produit des instances de MapiMessage.
- FolderInfo.AddMessage(MapiMessage) – Ajoute un MapiMessage à un dossier PST.
Étapes
- Définissez les chemins de fichiers pour le fichier OLM source et le fichier PST de destination.
- Ouvrez l’archive OLM en lecture et créez un nouveau fichier PST en écriture.
- Récupérez les dossiers de niveau supérieur de l’archive OLM.
- Définissez une fonction d’assistance pour trouver ou créer un dossier correspondant dans le PST à partir d’un nom de dossier donné.
- Définissez une fonction récursive qui :
- Crée ou obtient le dossier PST correspondant à chaque dossier OLM.
- Copie tous les messages du dossier OLM vers le dossier PST.
- S’appelle elle‑même pour chaque sous‑dossier du dossier OLM afin de maintenir l’arbre de dossiers.
- Appelez la fonction récursive sur tous les dossiers OLM de niveau supérieur, en utilisant le dossier racine du PST comme parent.
- Enregistrez l’ensemble de la hiérarchie de dossiers et des messages dans le nouveau fichier PST, en préservant les données MAPI.
Exemple de code
var olmPath = @"C:\data\archive.olm";
var pstPath = @"C:\data\output.pst";
// Create a new PST file
using (var olm = OlmStorage.FromFile(olmPath))
using (var pst = PersonalStorage.Create(pstPath, FileFormatVersion.Unicode))
{
// Get top-level folders in OLM
var rootFolders = olm.GetFolders();
// Helper: map OlmFolder -> FolderInfo in PST by recursively creating subfolders
FolderInfo GetOrCreatePstFolder(FolderInfo parentPstFolder, string folderName)
{
// Try to find existing subfolder (case-insensitive)
foreach (var sub in parentPstFolder.GetSubFolders())
{
if (string.Equals(sub.DisplayName, folderName, StringComparison.OrdinalIgnoreCase))
return sub;
}
// Create new subfolder
return parentPstFolder.AddSubFolder(folderName);
}
// Recursive traversal
void ProcessOlmFolder(OlmFolder olmFolder, FolderInfo pstParent)
{
// Create / get the corresponding PST folder
var pstFolder = GetOrCreatePstFolder(pstParent, olmFolder.Name);
// Copy messages: OlmFolder.EnumerateMapiMessages returns MapiMessage instances
foreach (var mapi in olmFolder.EnumerateMapiMessages())
{
// AddMessage preserves MAPI data into PST
pstFolder.AddMessage(mapi);
}
// Recurse into OLM subfolders (OlmFolder.SubFolders property)
foreach (var child in olmFolder.SubFolders)
{
ProcessOlmFolder(child, pstFolder);
}
}
// Note: PST.RootFolder exists; create top-level folders under it.
foreach (var top in rootFolders)
{
// Skip creating a duplicate for default PST root folder names if needed
ProcessOlmFolder(top, pst.RootFolder);
}
}
Important : un PST nouvellement créé inclut déjà un dossier Éléments supprimés par défaut — faites donc attention à ne pas dupliquer les dossiers par défaut.
Remarque :
Préservation des types de dossiers : les sous‑dossiers OLM peuvent correspondre à des dossiers spéciaux spécifiques d’Outlook (Boîte de réception, Éléments envoyés, Calendrier). Si vous souhaitez créer des dossiers IPM prédéfinis (afin qu’Outlook les reconnaisse comme dossiers standards), utilisez PersonalStorage.CreatePredefinedFolder ou GetPredefinedFolder selon le scénario. CreatePredefinedFolder renvoie un FolderInfo. Utilisez l’énumération StandardIpmFolder le cas échéant.
Performance : AddMessages (ajout en masse) est plus rapide que de nombreux appels à AddMessage. Envisagez de regrouper les messages en lots et d’utiliser FolderInfo.AddMessages(IEnumerable) pour réduire les entrées/sorties disque.
Conclusion
Dans cet article, nous avons appris comment convertir les fichiers Outlook for Mac (OLM) en formats PST et MBOX en C# à l’aide d’Aspose.Email for .NET. Nous avons exploré comment ouvrir et traiter les archives OLM, extraire les messages et préserver la hiérarchie des dossiers lors de l’exportation des données vers de nouveaux formats de stockage de courrier. Avec l’API Aspose.Email, les développeurs peuvent facilement automatiser les migrations d’e-mails multiplateformes, garantissant la compatibilité entre Outlook for Mac, Outlook for Windows et les clients open source tels que Thunderbird.
Pour plus de détails, explorez la documentation Aspose.Email et la référence API.
Ressources supplémentaires
- Télécharger Aspose.Email for .NET
- Exemples GitHub d’Aspose.Email
- Travailler avec des fichiers OLM en C#
