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 :

Étapes

  1. Définissez les chemins de fichier pour le fichier OLM d’entrée et le fichier MBOX de sortie.
  2. Ouvrez le fichier OLM en utilisant OlmStorage.FromFile.
  3. Créez un écrivain MBOX en utilisant MboxrdStorageWriter avec le chemin de sortie spécifié et les options.
  4. Accédez au dossier « Inbox » du fichier OLM en utilisant une recherche insensible à la casse.
  5. Parcourez tous les messages MAPI du dossier « Inbox ».
  6. Convertissez chaque message MAPI en un objet MailMessage standard.
  7. É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

Étapes

  1. Définissez les chemins de fichiers pour le fichier OLM source et le fichier PST de destination.
  2. Ouvrez l’archive OLM en lecture et créez un nouveau fichier PST en écriture.
  3. Récupérez les dossiers de niveau supérieur de l’archive OLM.
  4. Définissez une fonction d’assistance pour trouver ou créer un dossier correspondant dans le PST à partir d’un nom de dossier donné.
  5. 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.
  6. Appelez la fonction récursive sur tous les dossiers OLM de niveau supérieur, en utilisant le dossier racine du PST comme parent.
  7. 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 :

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

Voir aussi