La migrazione dei dati di posta elettronica da Outlook for Mac (OLM) a formati ampiamente supportati come MBOX (per le caselle di posta di Thunderbird / Unix) e PST (Outlook per Windows) è un’operazione comune quando si passa da una piattaforma all’altra. Microsoft Outlook per Mac utilizza il formato OLM (Outlook for Mac Data File) per archiviare email, contatti, calendari e altri elementi. Tuttavia, migrare questi dati in ambienti basati su Windows o in altri client di posta richiede spesso la conversione dei file OLM in formati universalmente supportati come MBOX (utilizzato da client come Thunderbird e Apple Mail) o PST (Outlook Personal Storage Table per Windows).

In questo articolo, ti mostreremo come convertire i file OLM in formati PST e MBOX in C# usando Aspose.Email for .NET, un’API potente che semplifica programmaticamente le complesse attività di migrazione della posta elettronica. Imparerai come aprire i file OLM, estrarre i messaggi, preservare le gerarchie delle cartelle e generare archivi di posta elettronica portatili per più piattaforme.

Utilizzo di Aspose.Email for .NET per la conversione

[Aspose.Email for .NET][] offre funzionalità complete per lavorare con vari formati di email, tra cui OLM, MBOX e PST. Semplifica le operazioni di conversione complesse grazie alla sua API intuitiva e alla documentazione estesa. Di seguito, illustreremo i passaggi per convertire OLM in MBOX e PST utilizzando C#.

Per iniziare, installa il pacchetto NuGet Aspose.Email nel tuo progetto .NET:

Install-Package Aspose.Email

Questo pacchetto include tutte le classi necessarie per gestire i file OLM, MBOX e PST.

Converti OLM in MBOX

Il formato MBOX memorizza i messaggi di posta elettronica come voci MIME concatenate, comunemente utilizzato dai client di posta elettronica open‑source. Di seguito è riportato un esempio di codice semplice ma efficiente per convertire tutti i messaggi da una cartella OLM in un file MBOX. Utilizza i seguenti membri dell’API:

Passaggi

  1. Definire i percorsi dei file per il file OLM di input e il file MBOX di output.
  2. Aprire il file OLM usando OlmStorage.FromFile.
  3. Creare un writer MBOX usando MboxrdStorageWriter con il percorso di output specificato e le opzioni.
  4. Accedere alla cartella “Inbox” dal file OLM usando una ricerca case‑insensitive.
  5. Scorrere tutti i messaggi MAPI nella cartella “Inbox”.
  6. Convertire ogni messaggio MAPI in un oggetto MailMessage standard.
  7. Scrivere ogni messaggio convertito nel file MBOX.

Esempio di codice

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);
    }
}

Nota:
Se desideri un MBOX per ogni cartella, crea un writer separato per ciascuna cartella OLM.
Se preferisci un unico archivio, riutilizza la stessa istanza di MboxrdStorageWriter e chiama WriteMessage più volte come mostrato nell’esempio di codice sopra.

Converti OLM in PST

La conversione da OLM a PST richiede spesso non solo la copia dei messaggi, ma anche la ricreazione della gerarchia delle cartelle. Il campione di codice qui sotto dimostra come convertire e copiare la struttura delle cartelle e i messaggi da un file di archivio OLM di Outlook a un file PST Unicode utilizzando Aspose.Email for .NET.

Membri chiave

Passaggi

  1. Imposta i percorsi dei file per il file OLM di origine e il file PST di destinazione.
  2. Apri l’archivio OLM in lettura e crea un nuovo file PST in scrittura.
  3. Recupera le cartelle di livello superiore dall’archivio OLM.
  4. Definisci una funzione di supporto per trovare o creare una cartella corrispondente all’interno del PST per un determinato nome di cartella.
  5. Definisci una funzione ricorsiva per:
    • Creare o ottenere la cartella PST corrispondente a ciascuna cartella OLM.
    • Copiare tutti i messaggi dalla cartella OLM alla cartella PST.
    • Richiamare se stessa per ogni sottocartella della cartella OLM, mantenendo l’albero delle cartelle.
  6. Invoca la funzione ricorsiva su tutte le cartelle OLM di livello superiore, usando la cartella radice del PST come genitore.
  7. Salva l’intera gerarchia di cartelle e i messaggi nel nuovo file PST, preservando i dati MAPI.

Esempio di codice

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);
    }
}

Importante: un PST appena creato include già per impostazione predefinita una cartella Posta eliminata — quindi fai attenzione a non duplicare le cartelle predefinite.

Nota:

Conclusione

In questo articolo, abbiamo imparato come convertire i file Outlook per Mac (OLM) nei formati PST e MBOX in C# utilizzando Aspose.Email for .NET. Abbiamo esplorato come aprire e elaborare gli archivi OLM, estrarre i messaggi e preservare le gerarchie delle cartelle durante l’esportazione dei dati in nuovi formati di archiviazione della posta. Con l’API Aspose.Email, gli sviluppatori possono automatizzare facilmente le migrazioni di posta elettronica cross‑platform, garantendo la compatibilità tra Outlook per Mac, Outlook per Windows e client open‑source come Thunderbird.

Per ulteriori dettagli, consultare la documentazione di Aspose.Email e il riferimento API.

Risorse aggiuntive

Vedi anche