Membaca dan Mengonversi File Outlook
Bekerja dengan File OST
Aspose.Email untuk .NET menyediakan API untuk membaca file OST Microsoft Outlook. Anda dapat memuat file OST dari disk atau stream ke dalam sebuah instance dari Aspose.Email.Outlook.Pst.PersonalStorage kelas untuk mengakses isinya, seperti folder, subfolder, dan pesan. Microsoft Outlook membuat file PST untuk menyimpan email ketika menggunakan server mail POP3 atau IMAP. Sebaliknya, ia membuat file OST ketika Microsoft Exchange menjadi server mail. File OST juga mendukung ukuran file yang lebih besar dibandingkan file PST.
Baca File OST
Proses membaca file OST dengan Aspose.Email persis sama dengan membaca file PST. Kode yang sama dapat membaca file PST dan OST: cukup berikan nama file yang tepat ke PersonalStorage.FromFile() metode. Cuplikan kode berikut menunjukkan cara membaca file OST.
Konversi OST ke PST
Coba sekarang!
Konversi email & arsip pesan secara online dengan gratis Aplikasi Konversi Aspose.Email.
Untuk melakukan operasi lain dengan file OST, silakan merujuk ke halaman berikut:
- Baca File PST dan Ambil Informasi
- Dapatkan Informasi Pesan dari File PST Outlook
- Ekstrak Pesan dari File PST Outlook dan Simpan ke Disk atau Stream dalam Format MSG
- Akses Informasi Kontak dari File PST Outlook dan Simpan ke Disk dalam Format MSG
Konversi PST ke OST
Konversi dari PST ke OST tidak didukung oleh Aspose.Email karena OST selalu dibuat oleh Outlook saat menambahkan akun dan menyinkronkan dengan server mail. Perbedaan antara file PST dan OST adalah PST hanya tersedia secara lokal. Konten OST juga tersedia di server email. Jadi tidak perlu mengonversi PST ke OST untuk penggunaan lokal. Namun Anda dapat mengimpor PST ke akun yang ada menggunakan wizard Impor/Ekspor di Outlook.
OLM adalah format file khusus yang digunakan oleh Microsoft Outlook untuk menyimpan data lokal seperti email, lampiran, catatan, data kalender, kontak, tugas, riwayat, dan lainnya. File OLM hanya kompatibel dengan Outlook untuk Mac dan tidak dapat dibuka atau diakses oleh Outlook untuk Windows, yang menggunakan format file PST.
Bekerja dengan File OLM
Buka File OLM
File format OLM dapat dibuka dengan dua cara:
- menggunakan konstruktor
- menggunakan metode statik FromFile
Ada perbedaan perilaku antara metode-metode ini. Lihat bagian di bawah.
Menggunakan Konstruktor
Untuk membuka file, panggil konstruktor dari OlmStorage kelas dan berikan nama file lengkap atau stream sebagai argumen ke dalamnya:
var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);
Menggunakan Metode Statis FromFile
Untuk membuka file, gunakan metode statik FromFile dan berikan nama file lengkap atau stream sebagai argumen:
var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);
Mengambil Folder
Untuk mengakses struktur direktori file OLM, buat sebuah instance dari OlmStorage kelas menggunakan konstruktornya dan berikan jalur ke file. Setelah file terbuka, akses struktur direktorinya menggunakan FolderHierarchy properti. Properti ini mengembalikan daftar OlmFolder objek, masing-masing mewakili sebuah direktori dalam file OLM. Untuk mengeksplorasi struktur direktori lebih lanjut, akses SubFolders properti dari setiap objek, yang mengembalikan daftar subdirektorinya. Dengan menggunakan properti ini, Anda dapat menavigasi seluruh hierarki direktori file OLM dan mengakses semua direktori serta subdirektori yang ada.
Contoh di bawah menampilkan daftar semua folder dalam urutan hierarki:
using (var olm = new OlmStorage(fileName))
{
PrintAllFolders(olm.FolderHierarchy, string.Empty);
}
private void PrintAllFolders(List<OlmFolder> folderHierarchy, string indent)
{
foreach (var folder in folderHierarchy)
{
Console.WriteLine($"{indent}{folder.Name}");
PrintAllFolders(folder.SubFolders, indent+"-");
}
}
Saat menggunakan FromFile metode untuk membuka file OLM, FolderHierarchy properti tidak akan diinisialisasi secara default dan akan mengembalikan null. Dalam kasus ini, panggil metode GetFolders secara eksplisit untuk menginisialisasi FolderHierarchy properti dan mengambil daftar direktori dalam file OLM:
using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}
Selain itu, Anda dapat mengambil folder apa pun dengan nama:
- Panggil GetFolder metode.
- Berikan nama folder sebagai argumen pertama dan nilai, yang menunjukkan apakah mengabaikan sensitivitas huruf besar/kecil saat mencari folder, sebagai parameter kedua.
using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}
Daftar Email
OlmFolder kelas, yang mewakili folder, memiliki metode berikut untuk mendapatkan daftar email:
- EnumerateMessages mengimplementasikan iterasi email dalam sebuah folder. Dalam kasus ini, setiap iterasi mengembalikan OlmMessageInfo objek, yang memberikan info singkat tentang email.
- EnumerateMapiMessages, juga mengimplementasikan iterasi email dalam sebuah folder, tetapi dalam kasus ini, setiap iterasi mengembalikan MapiMessage objek, yang mewakili email itu sendiri, dengan semua properti.
Menggunakan Metode EnumerateMessages
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}
Menggunakan Metode EnumerateMapiMessages
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var msg in folder.EnumerateMapiMessages())
{
// save message in MSG format
msg.Save($"{msg.Subject}.msg");
}
}
Properti berguna lainnya
Properti berguna lainnya dari kelas OlmFolder adalah: HasMessages dan MessageCount properti, yang mengembalikan keberadaan pesan di folder dan jumlahnya.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}
Dapatkan atau Atur Tanggal Modifikasi Pesan
Tanggal modifikasi mewakili tanggal dan waktu ketika pesan OLM terakhir dimodifikasi. Anda dapat menggunakan the OlmMessageInfo.ModifiedDate properti untuk mengambil atau memperbarui nilai tanggal modifikasi dari pesan OLM.
Berikut contoh yang menunjukkan penggunaan properti:
foreach (OlmMessageInfo messageInfo in inboxFolder.EnumerateMessages())
{
DateTime modifiedDate = messageInfo.ModifiedDate;
}
Ekstrak Email dan Item
OlmStorage kelas memiliki ExtractMapiMessage metode yang memungkinkan mengekstrak email. Metode ini menerima sebuah OlmMessageInfo objek.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
if (messageInfo.Date == DateTime.Today)
{
// Extracts today's messages form Inbox
var msg = olm.ExtractMapiMessage(messageInfo);
}
}
}
Menggunakan API Traversal
Anda dapat mengekstrak semua item dari file OLM Outlook sejauh mungkin, tanpa melempar pengecualian, bahkan jika sebagian data file asli rusak. Untuk melakukan ini, gunakan OlmStorage(TraversalExceptionsCallback callback) konstruktor dan Load(string fileName) metode alih-alih metode FromFile. Konstruktor memungkinkan mendefinisikan metode callback.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
Metode callback membuat pengecualian saat pemuatan dan traversel tersedia.
The Load metode mengembalikan ’true’ jika file berhasil dimuat dan penelusuran lebih lanjut memungkinkan. Jika file rusak dan penelusuran tidak memungkinkan, ‘false’ dikembalikan.
if (olm.Load(fileName))
Potongan kode berikut dan langkah-langkahnya menunjukkan cara menggunakan API ini:
- Buat instance baru dari OlmStorage kelas, dengan melewatkan callback penanganan pengecualian untuk menangani setiap pengecualian yang muncul selama proses.
- Muat file OLM dengan memanggil Load metode dari instance OlmStorage.
- Jika file OLM berhasil dimuat, dapatkan hierarki folder dengan memanggil GetFolders metode pada instance OlmStorage. Ini mengembalikan daftar objek OlmFolder.
- Panggil metode ExtractItems, dengan melewatkan instance OlmStorage dan daftar objek OlmFolder.
- Dalam metode ExtractItems, iterasi setiap folder dalam daftar folder.
- Jika folder berisi pesan (email), cetak nama folder ke konsol menggunakan Console.WriteLine(folder).
- Iterasi pesan-pesan dalam folder saat ini dengan memanggil metode EnumerateMessages pada instance OlmStorage, dengan melewatkan folder saat ini sebagai argumen.
- Cetak subjek setiap pesan ke konsol menggunakan Console.WriteLine(msg.Subject).
- Jika folder memiliki subfolder, panggil metode ExtractItems secara rekursif lagi, dengan melewatkan instance OlmStorage dan subfolder dari folder saat ini.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
{
if (olm.Load(fileName))
{
var folderHierarchy = olm.GetFolders();
ExtractItems(olm, folderHierarchy);
}
}
private static void ExtractItems(OlmStorage olm, List<OlmFolder> folders)
{
foreach (var folder in folders)
{
if (folder.HasMessages)
{
Console.WriteLine(folder);
foreach (var msg in olm.EnumerateMessages(folder))
{
Console.WriteLine(msg.Subject);
}
}
if (folder.SubFolders.Count > 0)
{
ExtractItems(olm, folder.SubFolders);
}
}
}
Ekstrak Pesan berdasarkan Identifier
Kadang diperlukan untuk mengekstrak pesan terpilih berdasarkan identifier. Misalnya, aplikasi Anda menyimpan identifier dalam basis data dan mengekstrak pesan sesuai permintaan. Ini adalah cara efisien untuk menghindari penelusuran seluruh penyimpanan setiap kali menemukan pesan spesifik untuk diekstrak. Fitur ini tersedia untuk penyimpanan OLM. EntryId properti dari OlmMessageInfo kelas mendapatkan identifier entri pesan. Overload ExtractMapiMessage(string id) metode dari OlmStorage kelas mengambil pesan dari OLM.
Kode di bawah menunjukkan cara mengekstrak pesan dari OLM berdasarkan identifier.
Kode melakukan langkah-langkah berikut:
- Memulai loop foreach untuk iterasi melalui daftar OlmMessageInfo objek. Loop menggunakan EnumerateMessages metode dari objek olmFolder untuk mengambil daftar semua pesan dalam folder saat ini yang sedang diiterasi.
- Loop mengekstrak objek MapiMessage yang sesuai dari penyimpanan dengan memanggil ExtractMapiMessage(string id) metode dari OlmStorage kelas, dengan memasukkan EntryId dari pesan saat ini sebagai parameter.
Objek MapiMessage yang diambil dapat digunakan untuk mengakses dan memanipulasi isi pesan. Loop berlanjut sampai semua pesan di folder telah diproses.
foreach (OlmMessageInfo msgInfo in olmFolder.EnumerateMessages())
{
MapiMessage msg = storage.ExtractMapiMessage(msgInfo.EntryId);
}
Pengambilan Path Folder
Anda juga dapat mendapatkan jalur folder dari folder dalam file OML. Aspose.Email menyediakan OlmFolder.Path properti yang mengembalikan jalur folder. Cuplikan kode berikut menunjukkan penggunaan OlmFolder.Path properti untuk mendapatkan jalur folder dalam file OML.
var storage = new OlmStorage("SampleOLM.olm");
PrintPath(storage, storage.FolderHierarchy);
public static void PrintPath(OlmStorage storage, List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
// print the current folder path
Console.WriteLine(folder.Path);
if (folder.SubFolders.Count > 0)
{
PrintPath(storage, folder.SubFolders);
}
}
}
Hitung Item di Folder
Anda juga dapat menghitung jumlah item dalam folder. Aspose.Email menyediakan OlmFolder.MessageCount properti yang mengembalikan jumlah item dalam folder. Cuplikan kode berikut menunjukkan penggunaan OlmFolder.MessageCount properti untuk mendapatkan jumlah item dalam folder file OML.
var storage = new OlmStorage("SampleOLM.olm");
PrintMessageCount(storage.FolderHierarchy);
public static void PrintMessageCount(List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
Console.WriteLine("Message Count [" + folder.Name + "]: " + folder.MessageCount);
}
}
Dapatkan Jumlah Total Item OlmStorage
OlmStorage kelas juga memiliki GetTotalItemsCount() metode yang mengembalikan total jumlah item pesan yang terdapat dalam penyimpanan OLM.
using (var olm = new OlmStorage("storage.olm"))
{
var count = olm.GetTotalItemsCount();
}
Pengambilan Warna Kategori Outlook
Untuk bekerja dengan warna kategori atau kategori item Outlook yang disimpan dalam file OLM, Aspose.Email menawarkan solusi berikut:
- OlmItemCategory kelas - mewakili kategori item Outlook yang tersedia dengan nama mereka dan warna yang terkait, yang diwakili dalam format heksadesimal.
- GetCategories() metode dari OlmStorage kelas - mengambil daftar kategori.
Contoh kode berikut menunjukkan cara mendapatkan semua kategori yang digunakan dari penyimpanan OML:
using (var olm = OlmStorage.FromFile("storage.olm"))
{
var categories = olm.GetCategories();
foreach (var category in categories)
{
Console.WriteLine($"Category name: {category.Name}");
//Color is represented as a hexadecimal value: #rrggbb
Console.WriteLine($"Category color: {category.Color}");
}
}
Contoh kode di bawah menunjukkan cara mendapatkan warna kategori pesan:
foreach (var msg in olm.EnumerateMessages(folder))
{
if (msg.Categories != null)
{
foreach (var msgCategory in msg.Categories)
{
Console.WriteLine($"Category name: {msgCategory}");
var categoryColor = cat.First(c => c.Name.Equals(msgCategory, StringComparison.OrdinalIgnoreCase)).Color;
Console.WriteLine($"Category color: {categoryColor}");
}
}
}
Konversi OLM ke PST
OLM adalah format file basis data yang digunakan oleh Microsoft Outlook untuk sistem Mac. File OLM menyimpan pesan email, data kalender, data kontak, dan pengaturan aplikasi. File OLM tidak didukung oleh Outlook untuk Windows. Oleh karena itu, tidak mungkin membuka file Outlook untuk Mac (OLM) di Outlook untuk Windows. Jika Anda ingin memigrasikan kotak surat Anda dari Outlook untuk Mac ke Outlook untuk Windows, Anda perlu mengonversi file OLM Outlook untuk Mac ke format file PST Outlook.
Langkah Kode
Untuk mengonversi file OLM ke PST ikuti langkah-langkah berikut:
- Buat sebuah instance dari OlmStorage kelas untuk membuka OLM sumber.
- Buka file OLM sumber.
- Buat file PST baru menggunakan Buat metode.
- Buat metode GetContainerClass untuk memetakan kelas pesan ke kelas folder.
- Buat metode AddToPst yang secara rekursif membaca setiap folder dan pesan-pesannya dari OLM menggunakan metode EnumerateMapiMessages dan menambahkannya ke PST dengan urutan yang sama menggunakan metode AddSubFolder dan AddMessage.
Contoh kode
Contoh kode berikut menunjukkan cara mengonversi OLM ke PST.
Metode Main:
// create an instance of OlmStorage class to open source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
// recursively reads each folder and its messages
// and adds them to the PST in the same order
foreach (var olmFolder in olm.FolderHierarchy)
{
AddToPst(pst.RootFolder, olmFolder);
}
}
Implementasi metode GetContainerClass:
public string GetContainerClass(string messageClass)
{
if (messageClass.StartsWith("IPM.Contact") || messageClass.StartsWith("IPM.DistList"))
{
return "IPF.Contact";
}
if (messageClass.StartsWith("IPM.StickyNote"))
{
return "IPF.StickyNote";
}
if (messageClass.StartsWith("IPM.Activity"))
{
return "IPF.Journal";
}
if (messageClass.StartsWith("IPM.Task"))
{
return "IPF.Task";
}
if (messageClass.StartsWith("IPM.Appointment") || messageClass.StartsWith("IPM.Schedule.meeting"))
{
return "IPF.Appointment";
}
return "IPF.Note";
}
Implementasi metode AddToPst:
public void AddToPst(FolderInfo pstFolder, OlmFolder olmFolder)
{
FolderInfo pstSubFolder = pstFolder.GetSubFolder(olmFolder.Name);
foreach (var msg in olmFolder.EnumerateMapiMessages())
{
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name, GetContainerClass(msg.MessageClass));
}
pstSubFolder.AddMessage(msg);
}
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name);
}
foreach (var olmSubFolder in olmFolder.SubFolders)
{
AddToPst(pstSubFolder, olmSubFolder);
}
}