Migracja danych e‑mail z Outlook for Mac (OLM) do powszechnie obsługiwanych formatów, takich jak MBOX (dla Thunderbird / skrzynek pocztowych Unix) i PST (Outlook for Windows), jest częstym zadaniem przy przechodzeniu między platformami. Microsoft Outlook for Mac używa formatu OLM (Outlook for Mac Data File) do przechowywania wiadomości e‑mail, kontaktów, kalendarzy i innych elementów. Jednak migracja tych danych do środowisk opartych na Windows lub innych klientów poczty często wymaga konwersji plików OLM do uniwersalnie obsługiwanych formatów, takich jak MBOX (używany przez klientów takich jak Thunderbird i Apple Mail) lub PST (Outlook Personal Storage Table for Windows).

W tym artykule pokażemy, jak konwertować pliki OLM do formatów PST i MBOX w C# przy użyciu Aspose.Email for .NET, potężnego API, które upraszcza złożone zadania migracji poczty elektronicznej programowo. Dowiesz się, jak otwierać pliki OLM, wyodrębniać wiadomości, zachowywać hierarchię folderów oraz generować przenośne archiwa poczty dla wielu platform.

Używanie Aspose.Email for .NET do konwersji

[Aspose.Email for .NET][] zapewnia kompleksowe funkcje umożliwiające pracę z różnymi formatami e‑mail, w tym OLM, MBOX i PST. Ułatwia skomplikowane zadania konwersji dzięki intuicyjnemu interfejsowi API oraz obszernej dokumentacji. Poniżej przeprowadzimy Cię krok po kroku przez proces konwersji OLM do MBOX i PST przy użyciu C#.

Aby rozpocząć, zainstaluj pakiet NuGet Aspose.Email w swoim projekcie .NET:

Install-Package Aspose.Email

Ten pakiet zawiera wszystkie niezbędne klasy do obsługi plików OLM, MBOX i PST.

Konwertuj OLM do MBOX

Format MBOX przechowuje wiadomości e‑mail jako połączone wpisy MIME, powszechnie używany przez otwarto‑źródłowe klienty poczty. Poniżej znajduje się prosty, ale wydajny przykład kodu konwertującego wszystkie wiadomości z folderu OLM do pliku MBOX. Wykorzystuje on następujące elementy API:

Kroki

  1. Zdefiniuj ścieżki plików dla pliku OLM wejściowego i pliku MBOX wyjściowego.
  2. Otwórz plik OLM przy użyciu OlmStorage.FromFile.
  3. Utwórz zapisujący MBOX przy użyciu MboxrdStorageWriter z określoną ścieżką wyjściową i opcjami.
  4. Uzyskaj dostęp do folderu “Inbox” w pliku OLM, używając wyszukiwania bez uwzględniania wielkości liter.
  5. Przejdź przez wszystkie wiadomości MAPI w folderze “Inbox”.
  6. Przekonwertuj każdą wiadomość MAPI na standardowy obiekt MailMessage.
  7. Zapisz każdą przekonwertowaną wiadomość do pliku MBOX.

Przykład kodu

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

Uwaga: Jeśli chcesz mieć jeden plik MBOX na folder, utwórz osobny writer dla każdego folderu OLM.
Jeśli wolisz pojedynczy archiwum, ponownie użyj jednej instancji MboxrdStorageWriter i wywołuj WriteMessage wielokrotnie, jak pokazano w powyższym przykładzie kodu.

Konwertuj OLM do PST

Konwersja OLM do PST często wymaga nie tylko kopiowania wiadomości, ale także odtworzenia hierarchii folderów. Poniższy przykład kodu demonstruje, jak przekonwertować i skopiować strukturę folderów oraz wiadomości z archiwum Outlook OLM do pliku Unicode PST przy użyciu Aspose.Email for .NET.

Kluczowe elementy

Kroki

  1. Ustaw ścieżki plików dla źródłowego pliku OLM i docelowego pliku PST.
  2. Otwórz archiwum OLM do odczytu i utwórz nowy plik PST do zapisu.
  3. Pobierz foldery najwyższego poziomu z archiwum OLM.
  4. Zdefiniuj funkcję pomocniczą, która znajdzie lub utworzy pasujący folder w PST dla podanej nazwy folderu.
  5. Zdefiniuj funkcję rekurencyjną, aby:
    • Utworzyć lub uzyskać odpowiadający folder PST dla każdego folderu OLM.
    • Skopiować wszystkie wiadomości z folderu OLM do folderu PST.
    • Wywołać się ponownie dla każdego podfolderu w folderze OLM, aby zachować strukturę drzewa folderów.
  6. Wywołaj funkcję rekurencyjną dla wszystkich folderów najwyższego poziomu OLM, używając głównego folderu PST jako rodzica.
  7. Zapisz całą hierarchię folderów i wiadomości do nowego pliku PST, zachowując dane MAPI.

Przykład kodu

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

Ważne: nowo utworzony plik PST już domyślnie zawiera folder Deleted Items — więc należy uważać, aby nie zduplikować folderów domyślnych.

Uwaga:

Podsumowanie

W tym artykule dowiedzieliśmy się, jak konwertować pliki Outlook for Mac (OLM) na formaty PST i MBOX w C# przy użyciu Aspose.Email for .NET. Zbadaliśmy, jak otwierać i przetwarzać archiwa OLM, wyodrębniać wiadomości oraz zachowywać hierarchię folderów podczas eksportu danych do nowych formatów przechowywania poczty. Dzięki Aspose.Email API programiści mogą łatwo automatyzować migracje poczty między platformami, zapewniając kompatybilność między Outlook for Mac, Outlook for Windows i klientami open‑source, takimi jak Thunderbird.

Aby uzyskać dalsze informacje, zapoznaj się z dokumentacją Aspose.Email oraz referencją API.

Dodatkowe zasoby

Zobacz także