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:
- OlmStorage.FromFile(…) - Bir OLM arşivini açar ve klasör ağacına ve öğelere erişim sağlar. Klasörleri listelemek veya bir OLM dosyasından mesajları çıkarmak için kullanabilirsiniz.
- GetFolder(string name, bool ignoreCase) - İstenen klasör adı için bir OlmFolder döndürür.
- OlmFolder.EnumerateMapiMessages() - O klasördeki MapiMessage öğelerini yinele.
- MapiMessage.ToMailMessage(MailConversionOptions) - Bir MapiMessage öğesini MailMessage (MIME) biçimine dönüştürür.
- MboxrdStorageWriter.WriteMessage(MailMessage) - MIME MailMessage öğesini MBOX akışına yazar.
Adımlar
- Giriş OLM dosyası ve çıkış MBOX dosyası için dosya yollarını tanımlayın.
- OLM dosyasını
OlmStorage.FromFilekullanarak açın. - Belirtilen çıkış yolu ve seçeneklerle
MboxrdStorageWriterkullanarak bir MBOX yazıcı oluşturun. - OLM dosyasından “Inbox” klasörüne büyük/küçük harf duyarsız arama ile erişin.
- “Inbox” klasöründeki tüm MAPI mesajları üzerinde döngü oluşturun.
- Her bir MAPI mesajını standart bir
MailMessagenesnesine dönüştürün. - 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
- PersonalStorage.Create(path, FileFormatVersion.Unicode) – Yeni bir Unicode PST dosyası oluşturur ve bir PersonalStorage örneği döndürür. Mevcut PST’leri açmak için PersonalStorage.Load(…) kullanın. PersonalStorage sınıfı, PST dosyalarıyla çalışmak için giriş noktasıdır.
- PersonalStorage.RootFolder – PST’nin kök FolderInfo nesnesini verir. Alt klasör oluşturmak için FolderInfo.AddSubFolder(name) kullanın. FolderInfo.GetSubFolders() alt klasörleri döndürür; böylece aynı ada sahip bir klasörün zaten var olup olmadığını kontrol edebilirsiniz.
- OlmStorage.GetFolders() – Üst‑seviye OlmFolder koleksiyonunu (OLM klasör hiyerarşisini) döndürür. OlmFolder.SubFolders özelliği alt klasörleri içerir (dolayısıyla yinelemeli olarak alt klasörlere inebilirsiniz).
- OlmFolder.EnumerateMapiMessages() – MapiMessage nesnelerini üretir.
- FolderInfo.AddMessage(MapiMessage) – Bir MapiMessage nesnesini PST klasörüne ekler.
Adımlar
- Kaynak OLM dosyası ve hedef PST dosyası için dosya yollarını ayarlayın.
- OLM arşivini okuma amacıyla açın ve yazma amacıyla yeni bir PST dosyası oluşturun.
- OLM arşivinden üst‑seviye klasörleri alın.
- 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.
- 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.
- 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.
- 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:
Klasör türlerini koruma: OLM alt klasörleri belirli Outlook özel klasörlerine (Gelen Kutusu, Gönderilmiş Öğeler, Takvim) eşlenebilir. Eğer önceden tanımlanmış IPM klasörleri oluşturmak istiyorsanız (böylece Outlook bunları standart klasörler olarak tanır), senaryoya bağlı olarak PersonalStorage.CreatePredefinedFolder veya GetPredefinedFolder kullanın. CreatePredefinedFolder bir FolderInfo döndürür. Uygun olduğunda StandardIpmFolder enumunu kullanın.
Performans: AddMessages (toplu ekleme) birçok AddMessage çağrısından daha hızlıdır. Disk I/O’yu azaltmak için mesajları toplu olarak toplayıp FolderInfo.AddMessages(IEnumerable) kullanmayı düşünün.
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.
