Migrating email data from Outlook for Mac (OLM) to widely supported formats like MBOX (for Thunderbird / Unix mailboxes) and PST (Outlook for Windows) is a common task when moving between platforms. Microsoft Outlook for Mac uses the OLM (Outlook for Mac Data File) format to store emails, contacts, calendars, and other items. However, migrating this data to Windows-based environments or other email clients often requires converting OLM files to universally supported formats like MBOX (used by clients such as Thunderbird and Apple Mail) or PST (Outlook Personal Storage Table for Windows).

Bu makalede, Aspose.Email for .NET kullanarak C# içinde OLM dosyalarını PST ve MBOX formatlarına nasıl dönüştüreceğinizi göstereceğiz, bu güçlü API programatik olarak karmaşık e-posta taşıma görevlerini basitleştirir. OLM dosyalarını nasıl açacağınızı, mesajları nasıl çıkaracağınızı, klasör hiyerarşilerini nasıl koruyacağınızı ve birden fazla platform için taşınabilir e-posta arşivleri nasıl oluşturacağınızı öğreneceksiniz.

Aspose.Email for .NET Kullanarak Dönüştürme

[Aspose.Email for .NET][] çeşitli e-posta formatlarıyla, OLM, MBOX ve PST dahil, çalışmak için kapsamlı özellikler sunar. Sezgisel API’si ve kapsamlı belgeleriyle karmaşık dönüşüm görevlerini basitleştirir. Aşağıda, OLM’yi MBOX ve PST’ye C# kullanarak dönüştürme adımlarını inceleyeceğiz.

Başlamak için, .NET projenize Aspose.Email NuGet paketini yükleyin:

Install-Package Aspose.Email

Bu paket, OLM, MBOX ve PST dosyalarını işlemek için gerekli tüm sınıfları içerir.

OLM’yi MBOX’a Dönüştür

MBOX formatı, e-posta mesajlarını birleştirilmiş MIME girdileri olarak depolar ve genellikle açık kaynaklı e-posta istemcileri tarafından kullanılır. Aşağıda, bir OLM klasöründeki tüm mesajları bir MBOX dosyasına dönüştüren basit ama etkili bir kod örneği bulunmaktadır. Aşağıdaki API üyelerini kullanır:

Adımlar

  1. Giriş OLM dosyası ve çıkış MBOX dosyası için dosya yollarını tanımlayın.
  2. OLM dosyasını OlmStorage.FromFile kullanarak açın.
  3. Belirtilen çıkış yolu ve seçeneklerle MboxrdStorageWriter kullanarak bir MBOX yazıcı oluşturun.
  4. OLM dosyasından “Inbox” klasörüne büyük/küçük harf duyarsız arama ile erişin.
  5. “Inbox” klasöründeki tüm MAPI mesajları üzerinde döngü oluşturun.
  6. Her bir MAPI mesajını standart bir MailMessage nesnesine dönüştürün.
  7. Dönüştürülen her mesajı MBOX dosyasına yazın.

Kod örneği

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

Not:
Bir klasör başına bir MBOX istiyorsanız, her OLM klasörü için ayrı bir yazar oluşturun.
Tek bir arşiv tercih ediyorsanız, bir MboxrdStorageWriter örneğini yeniden kullanın ve yukarıdaki kod örneğinde gösterildiği gibi WriteMessage metodunu tekrarlayarak çağırın.

OLM’yi PST’ye Dönüştür

OLM’yi PST’ye dönüştürmek genellikle yalnızca mesajları kopyalamakla kalmaz, aynı zamanda klasör hiyerarşisini de yeniden oluşturmayı gerektirir. Aşağıdaki kod örneği, bir Outlook OLM arşiv dosyasından bir Unicode PST dosyasına klasör yapısını ve mesajları nasıl dönüştüreceğinizi ve kopyalayacağınızı Aspose.Email for .NET kullanarak gösterir.

Temel üyeler

Adımlar

  1. Kaynak OLM dosyası ve hedef PST dosyası için dosya yollarını ayarlayın.
  2. OLM arşivini okuma amacıyla açın ve yazma amacıyla yeni bir PST dosyası oluşturun.
  3. OLM arşivinden üst‑seviye klasörleri alın.
  4. Belirli bir klasör adı için PST içinde eşleşen klasörü bulup oluşturacak bir yardımcı işlev tanımlayın.
  5. Aşağıdaki işlemleri yapan yinelemeli bir işlev tanımlayın:
    • Her OLM klasörü için karşılık gelen PST klasörünü oluşturun veya alın.
    • OLM klasöründeki tüm mesajları PST klasörüne kopyalayın.
    • Klasör ağacını korumak amacıyla OLM klasöründeki her alt klasör için kendisini tekrar çağırın.
  6. Tüm üst‑seviye OLM klasörleri üzerinde, üst klasör olarak PST kök klasörünü kullanarak yinelemeli işlevi çağırın.
  7. Yeni PST dosyasına tüm klasör hiyerarşisini ve mesajları kaydedin; MAPI verileri korunmuş olacaktır.

Kod örneği

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

Önemli: yeni oluşturulan bir PST zaten varsayılan olarak bir Deleted Items klasörü içerir — bu yüzden varsayılan klasörleri çoğaltmamaya dikkat edin.

Not:

Sonuç

Bu makalede, Outlook for Mac (OLM) dosyalarını C# kullanarak Aspose.Email for .NET ile PST ve MBOX formatlarına nasıl dönüştüreceğimizi öğrendik. OLM arşivlerini nasıl açıp işleyebileceğimizi, mesajları nasıl çıkarabileceğimizi ve verileri yeni posta depolama formatlarına dışa aktarırken klasör hiyerarşilerini nasıl koruyabileceğimizi inceledik. Aspose.Email API sayesinde geliştiriciler, Outlook for Mac, Outlook for Windows ve Thunderbird gibi açık kaynaklı istemciler arasında uyumluluğu sağlayarak çapraz platform e-posta geçişlerini kolayca otomatikleştirebilir.

Daha fazla ayrıntı için, Aspose.Email belgeleri ve API referansı inceleyin.

Ek Kaynaklar

İlgili