Migrasi data email dari Outlook for Mac (OLM) ke format yang didukung secara luas seperti MBOX (untuk Thunderbird / kotak surat Unix) dan PST (Outlook untuk Windows) adalah tugas umum saat berpindah antar platform. Microsoft Outlook untuk Mac menggunakan format OLM (Outlook for Mac Data File) untuk menyimpan email, kontak, kalender, dan item lainnya. Namun, memigrasikan data ini ke lingkungan berbasis Windows atau klien email lain sering memerlukan konversi file OLM ke format yang didukung secara universal seperti MBOX (digunakan oleh klien seperti Thunderbird dan Apple Mail) atau PST (Outlook Personal Storage Table untuk Windows).
Dalam artikel ini, kami akan menunjukkan cara mengonversi file OLM ke format PST dan MBOX dalam C# menggunakan Aspose.Email for .NET, sebuah API kuat yang menyederhanakan tugas migrasi email yang kompleks secara programatis. Anda akan belajar cara membuka file OLM, mengekstrak pesan, mempertahankan hierarki folder, dan menghasilkan arsip email portabel untuk berbagai platform.
Menggunakan Aspose.Email for .NET untuk Konversi
[Aspose.Email for .NET][] menyediakan fitur komprehensif untuk bekerja dengan berbagai format email, termasuk OLM, MBOX, dan PST. Ini menyederhanakan tugas konversi yang kompleks dengan API yang intuitif dan dokumentasi yang luas. Di bawah ini, kami akan memandu langkah‑langkah untuk mengonversi OLM ke MBOX dan PST menggunakan C#.
Untuk memulai, instal paket NuGet Aspose.Email di proyek .NET Anda:
Install-Package Aspose.Email
Paket ini mencakup semua kelas yang diperlukan untuk menangani file OLM, MBOX, dan PST.
Konversi OLM ke MBOX
Format MBOX menyimpan pesan email sebagai entri MIME yang digabungkan, biasanya digunakan oleh klien email sumber terbuka. Di bawah ini adalah contoh kode yang sederhana namun efisien untuk mengonversi semua pesan dari folder OLM menjadi file MBOX. Ini menggunakan anggota API berikut:
- OlmStorage.FromFile(…) - Membuka arsip OLM dan memberi Anda akses ke pohon folder serta itemnya. Anda dapat menggunakannya untuk menelusuri folder atau mengekstrak pesan dari file OLM.
- GetFolder(string name, bool ignoreCase) - Mengembalikan sebuah OlmFolder untuk nama folder yang diminta.
- OlmFolder.EnumerateMapiMessages() - Mengiterasi item MapiMessage di folder tersebut.
- MapiMessage.ToMailMessage(MailConversionOptions) - Mengonversi sebuah MapiMessage menjadi MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - Menulis sebuah MailMessage MIME ke aliran MBOX.
Langkah
- Tentukan jalur file untuk file OLM input dan file MBOX output.
- Buka file OLM menggunakan
OlmStorage.FromFile. - Buat penulis MBOX menggunakan
MboxrdStorageWriterdengan jalur output dan opsi yang ditentukan. - Akses folder “Inbox” dari file OLM menggunakan pencarian tidak sensitif huruf besar/kecil.
- Loop melalui semua pesan MAPI di folder “Inbox”.
- Konversi setiap pesan MAPI ke objek
MailMessagestandar. - Tulis setiap pesan yang telah dikonversi ke file MBOX.
Contoh kode
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);
}
}
Catatan: Jika Anda menginginkan satu MBOX per folder, buat penulis terpisah untuk setiap folder OLM.
Jika Anda lebih suka satu arsip tunggal, gunakan kembali satu instance MboxrdStorageWriter dan panggil WriteMessage berulang kali seperti yang ditunjukkan dalam contoh kode di atas.
Konversi OLM ke PST
Mengonversi OLM ke PST sering kali memerlukan tidak hanya menyalin pesan tetapi juga membuat kembali hierarki folder. Contoh kode di bawah ini menunjukkan cara mengonversi dan menyalin struktur folder serta pesan dari file arsip Outlook OLM ke file PST Unicode menggunakan Aspose.Email for .NET.
Anggota utama
- PersonalStorage.Create(path, FileFormatVersion.Unicode) - Membuat file PST Unicode baru dan mengembalikan instance PersonalStorage. Gunakan PersonalStorage.Load(…) untuk membuka PST yang sudah ada. Kelas PersonalStorage adalah titik masuk untuk bekerja dengan file PST.
- PersonalStorage.RootFolder - Memberikan Anda FolderInfo root untuk PST. Gunakan FolderInfo.AddSubFolder(name) untuk membuat subfolder. FolderInfo.GetSubFolders() mengembalikan anak‑anak sehingga Anda dapat memeriksa apakah folder dengan nama yang sama sudah ada.
- OlmStorage.GetFolders() - Mengembalikan koleksi OlmFolder tingkat atas (hierarki folder OLM). Properti OlmFolder.SubFolders berisi anak‑anak (sehingga Anda dapat menuruni secara rekursif).
- OlmFolder.EnumerateMapiMessages() - Menghasilkan instance MapiMessage.
- FolderInfo.AddMessage(MapiMessage) - Menambahkan MapiMessage ke folder PST.
Langkah‑langkah
- Tetapkan jalur file untuk file OLM sumber dan file PST tujuan.
- Buka arsip OLM untuk membaca dan buat file PST baru untuk menulis.
- Ambil folder tingkat atas dari arsip OLM.
- Definisikan fungsi pembantu untuk menemukan atau membuat folder yang cocok di dalam PST untuk nama folder tertentu.
- Definisikan fungsi rekursif untuk:
- Membuat atau mendapatkan folder PST yang sesuai untuk setiap folder OLM.
- Menyalin semua pesan dari folder OLM ke folder PST.
- Memanggil dirinya sendiri untuk setiap subfolder dalam folder OLM guna mempertahankan struktur folder.
- Panggil fungsi rekursif pada semua folder OLM tingkat atas, menggunakan folder root PST sebagai induk.
- Simpan seluruh hierarki folder dan pesan ke dalam file PST baru, mempertahankan data MAPI.
Contoh kode
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);
}
}
Penting: sebuah PST yang baru dibuat sudah menyertakan folder Deleted Items secara default — jadi berhati-hatilah agar tidak menggandakan folder default.
Catatan:
Mempertahankan jenis folder: Subfolder OLM dapat dipetakan ke folder khusus Outlook tertentu (Inbox, Sent Items, Calendar). Jika Anda ingin membuat folder IPM yang telah ditentukan (agar Outlook mengenalinya sebagai folder standar), gunakan PersonalStorage.CreatePredefinedFolder atau GetPredefinedFolder tergantung pada skenarionya. CreatePredefinedFolder mengembalikan sebuah FolderInfo. Gunakan enum StandardIpmFolder bila sesuai.
Kinerja: AddMessages (penambahan massal) lebih cepat daripada banyak panggilan ke AddMessage. Pertimbangkan mengumpulkan pesan ke dalam batch dan menggunakan FolderInfo.AddMessages(IEnumerable) untuk mengurangi I/O disk.
Kesimpulan
Dalam artikel ini, kami telah mempelajari cara mengonversi file Outlook for Mac (OLM) ke format PST dan MBOX dalam C# menggunakan Aspose.Email for .NET. Kami mengeksplorasi cara membuka dan memproses arsip OLM, mengekstrak pesan, dan mempertahankan hierarki folder saat mengekspor data ke format penyimpanan email baru. Dengan Aspose.Email API, pengembang dapat dengan mudah mengotomatiskan migrasi email lintas platform, memastikan kompatibilitas antara Outlook for Mac, Outlook for Windows, dan klien sumber terbuka seperti Thunderbird.
Untuk detail lebih lanjut, jelajahi dokumentasi Aspose.Email dan referensi API.
