Việc di chuyển dữ liệu email từ Outlook for Mac (OLM) sang các định dạng được hỗ trợ rộng rãi như MBOX (cho Thunderbird / Unix mailboxes) và PST (Outlook for Windows) là một nhiệm vụ phổ biến khi chuyển đổi giữa các nền tảng. Microsoft Outlook for Mac sử dụng định dạng OLM (Outlook for Mac Data File) để lưu trữ email, danh bạ, lịch và các mục khác. Tuy nhiên, việc di chuyển dữ liệu này sang môi trường dựa trên Windows hoặc các khách hàng email khác thường đòi hỏi chuyển đổi các tệp OLM sang các định dạng được hỗ trợ toàn cầu như MBOX (được sử dụng bởi các khách hàng như Thunderbird và Apple Mail) hoặc PST (Outlook Personal Storage Table for Windows).

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách chuyển đổi các tệp OLM sang định dạng PST và MBOX trong C# bằng cách sử dụng Aspose.Email for .NET, một API mạnh mẽ giúp đơn giản hóa các nhiệm vụ di chuyển email phức tạp một cách lập trình. Bạn sẽ học cách mở các tệp OLM, trích xuất tin nhắn, bảo tồn cấu trúc thư mục, và tạo ra các kho lưu trữ email di động cho nhiều nền tảng.

Sử dụng Aspose.Email for .NET để Chuyển đổi

[Aspose.Email for .NET][] cung cấp các tính năng toàn diện để làm việc với nhiều định dạng email khác nhau, bao gồm OLM, MBOX và PST. Nó đơn giản hóa các nhiệm vụ chuyển đổi phức tạp với API trực quan và tài liệu phong phú. Dưới đây, chúng tôi sẽ hướng dẫn các bước chuyển đổi OLM sang MBOX và PST bằng C#.

Để bắt đầu, cài đặt gói Aspose.Email NuGet trong dự án .NET của bạn:

Install-Package Aspose.Email

Gói này bao gồm tất cả các lớp cần thiết để xử lý các tệp OLM, MBOX và PST.

Chuyển đổi OLM sang MBOX

Định dạng MBOX lưu trữ các tin nhắn email dưới dạng các mục MIME được nối tiếp nhau, thường được các client email mã nguồn mở sử dụng. Dưới đây là một ví dụ mã đơn giản nhưng hiệu quả để chuyển đổi tất cả các tin nhắn từ một thư mục OLM sang tệp MBOX. Nó sử dụng các thành viên API sau:

Các bước

  1. Xác định đường dẫn tệp cho tệp OLM đầu vào và tệp MBOX đầu ra.
  2. Mở tệp OLM bằng cách sử dụng OlmStorage.FromFile.
  3. Tạo một trình ghi MBOX bằng MboxrdStorageWriter với đường dẫn đầu ra và các tùy chọn đã chỉ định.
  4. Truy cập thư mục “Inbox” từ tệp OLM bằng tìm kiếm không phân biệt chữ hoa chữ thường.
  5. Lặp qua tất cả các tin nhắn MAPI trong thư mục “Inbox”.
  6. Chuyển đổi mỗi tin nhắn MAPI thành đối tượng MailMessage tiêu chuẩn.
  7. Ghi mỗi tin nhắn đã chuyển đổi vào tệp MBOX.

Ví dụ mã

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

Lưu ý:
Nếu bạn muốn một tệp MBOX cho mỗi thư mục, tạo một writer riêng cho mỗi thư mục OLM.
Nếu bạn muốn một kho lưu trữ duy nhất, tái sử dụng một thể hiện MboxrdStorageWriter và gọi WriteMessage liên tục như trong ví dụ mã trên.

Chuyển đổi OLM sang PST

Việc chuyển đổi OLM sang PST thường không chỉ yêu cầu sao chép tin nhắn mà còn phải tái tạo cấu trúc thư mục. Đoạn mã mẫu dưới đây minh họa cách chuyển đổi và sao chép cấu trúc thư mục và tin nhắn từ tệp lưu trữ OLM của Outlook sang tệp PST Unicode bằng cách sử dụng Aspose.Email for .NET.

Các thành viên chính

Các bước thực hiện

  1. Đặt đường dẫn tệp cho tệp OLM nguồn và tệp PST đích.
  2. Mở kho lưu trữ OLM để đọc và tạo một tệp PST mới để ghi.
  3. Lấy các thư mục cấp cao nhất từ kho lưu trữ OLM.
  4. Định nghĩa một hàm trợ giúp để tìm hoặc tạo một thư mục tương ứng trong PST cho một tên thư mục cho trước.
  5. Định nghĩa một hàm đệ quy để:
    • Tạo hoặc lấy thư mục PST tương ứng cho mỗi thư mục OLM.
    • Sao chép tất cả tin nhắn từ thư mục OLM sang thư mục PST.
    • Gọi lại chính nó cho mỗi thư mục con trong thư mục OLM để duy trì cấu trúc cây.
  6. Gọi hàm đệ quy trên tất cả các thư mục OLM cấp cao nhất, sử dụng thư mục gốc PST làm cha.
  7. Lưu toàn bộ cấu trúc thư mục và tin nhắn vào tệp PST mới, bảo toàn dữ liệu MAPI.

Mẫu mã

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

Quan trọng: một PST mới tạo đã bao gồm thư mục Deleted Items theo mặc định — vì vậy hãy cẩn thận không tạo trùng các thư mục mặc định.

Lưu ý:

Kết luận

Trong bài viết này, chúng tôi đã tìm hiểu cách chuyển đổi các tệp Outlook for Mac (OLM) sang định dạng PST và MBOX trong C# bằng cách sử dụng Aspose.Email for .NET. Chúng tôi đã khám phá cách mở và xử lý các kho lưu trữ OLM, trích xuất tin nhắn và bảo tồn cấu trúc thư mục khi xuất dữ liệu sang các định dạng lưu trữ thư mới. Với Aspose.Email API, các nhà phát triển có thể dễ dàng tự động hoá việc di chuyển email đa nền tảng, đảm bảo tính tương thích giữa Outlook for Mac, Outlook for Windows và các khách hàng mã nguồn mở như Thunderbird.

Để biết thêm chi tiết, khám phá tài liệu Aspose.Emailtham chiếu API.

Tài nguyên bổ sung

Xem Thêm