Read MS Outlook OLM Files in C# .NET

OLM là một định dạng tệp mà Microsoft Outlook cho Mac sử dụng để lưu trữ dữ liệu cục bộ. OLM chứa dữ liệu cục bộ như email, tệp đính kèm, ghi chú, dữ liệu lịch, danh bạ, công việc, lịch sử, v.v. Tệp OLM được sử dụng bởi Outlook cho Mac. Outlook cho Windows không thể truy cập hoặc mở nó. Phiên bản của Outlook cho Windows chỉ hỗ trợ định dạng tệp PST để lưu trữ dữ liệu. Trong bài viết này, chúng ta sẽ xem xét cách mở và đọc các tệp định dạng OLM từ các ứng dụng C#.

C# .NET API để Đọc tệp OLM

Aspose.Email for .NET là một API mạnh mẽ cung cấp một loạt các tính năng để triển khai các ứng dụng email. Nó cũng cho phép đọc các tệp OLM và các định dạng lưu trữ email khác như MBOX, PST/OST. Bạn có thể cài đặt thư viện qua NuGet hoặc tải xuống DLL của nó.

PM> Install-Package Aspose.Email

Mở các tệp định dạng OLM

API Aspose.Email giới thiệu hai cách để mở các tệp định dạng OLM:

Có sự khác biệt trong hành vi giữa các phương thức này. Xem phần dưới đây.

Mở tệp bằng constructor

Để mở một tệp, bạn nên gọi constructor của lớp OlmStorage và truyền tên tệp đầy đủ hoặc luồng làm đối số:

var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);

Mở tệp bằng phương thức tĩnh FromFile

Để mở tệp, bạn nên sử dụng phương thức tĩnh FromFile và truyền tên tệp đầy đủ hoặc luồng làm đối số:

var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);

Lấy thư mục

Sau khi mở tệp bằng constructor, nó sẽ có sẵn thuộc tính FolderHierarchy. Nó trả về danh sách các thư mục tồn tại trong tệp OLM. Mỗi đối tượng của lớp OlmFolder trong danh sách có thuộc tính SubFolders, trả về danh sách các thư mục con. Do đó, chúng ta có quyền truy cập vào tất cả các thư mục trong OLM.

Ví dụ dưới đây hiển thị danh sách tất cả các thư mục theo thứ tự phân cấp:

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

Nếu mở tệp bằng phương thức FromFile, thì mặc định thuộc tính FolderHierarchy sẽ không được khởi tạo và sẽ trả về null. Trong trường hợp này, cần gọi rõ ràng phương thức GetFolders:

using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}

Ngoài ra, có thể lấy bất kỳ thư mục nào theo tên. Để làm điều này, bạn nên:

  • gọi phương thức GetFolder

  • truyền tên thư mục làm đối số đầu tiên và giá trị, cho biết có bỏ qua độ nhạy chữ hoa chữ thường khi tìm kiếm một thư mục hay không, làm tham số thứ hai.

using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}

Danh sách email

Lớp OlmFolder, đại diện cho thư mục, có các phương thức sau để lấy danh sách email:

  • EnumerateMessages thực hiện việc lặp qua các email trong một thư mục. Trong trường hợp này, mỗi lần lặp sẽ trả về một đối tượng OlmMessageInfo, cung cấp thông tin ngắn gọn về email.

  • EnumerateMapiMessages, cũng thực hiện việc lặp qua các email trong một thư mục, nhưng trong trường hợp này, mỗi lần lặp sẽ trả về một đối tượng MapiMessage, đại diện cho chính email, với tất cả các thuộc tính.

Sử dụng phương thức EnumerateMessages

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}

Sử dụng phương thức 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");
}
}

Các thuộc tính hữu ích khác

Ngoài ra, lớp OlmFolder có các thuộc tính HasMessagesMessageCount, trả về sự hiện diện của các tin nhắn trong thư mục và số lượng của chúng:

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}

Trích xuất email

Lớp OlmStorage có phương thức ExtractMapiMessage, cho phép trích xuất email. Phương thức này nhận một đối tượng OlmMessageInfo.

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

Kết luận

Trong bài viết này, bạn đã học cách đọc các tệp OLM trong C#. Bạn đã thấy các cách để lấy danh sách các thư mục và trích xuất các tin nhắn từ tệp OLM. Ngoài ra, bạn có thể tìm hiểu thêm về Aspose.Email for .NET bằng cách sử dụng tài liệu. Bạn cũng có thể chia sẻ câu hỏi hoặc yêu cầu của mình trong diễn đàn của chúng tôi.

Xem Thêm