將電子郵件資料從 Outlook for Mac (OLM) 遷移到廣泛支援的格式,如 MBOX(用於 Thunderbird / Unix 郵箱)和 PST(Outlook for Windows),是跨平台搬移時的常見任務。Microsoft Outlook for Mac 使用 OLM(Outlook for Mac Data File)格式來儲存電子郵件、聯絡人、行事曆及其他項目。然而,將此資料遷移至基於 Windows 的環境或其他電子郵件客戶端,通常需要將 OLM 檔案轉換為通用支援的格式,如 MBOX(客戶端如 Thunderbird 和 Apple Mail 使用)或 PST(Outlook Personal Storage Table for Windows)。

在本文中,我們將向您展示如何使用 Aspose.Email for .NET 以 C# 將 OLM 檔案轉換為 PST 和 MBOX 格式,這是一個功能強大的 API,能以程式方式簡化複雜的電子郵件遷移任務。您將學習如何開啟 OLM 檔案、提取訊息、保留資料夾層級,並為多平台生成可攜式的電子郵件存檔。

使用 Aspose.Email for .NET 進行轉換

[Aspose.Email for .NET][] 提供全面的功能以處理各種電子郵件格式,包括 OLM、MBOX 和 PST。它以直觀的 API 和豐富的文件簡化了複雜的轉換任務。下面,我們將演示使用 C# 將 OLM 轉換為 MBOX 和 PST 的步驟。

要開始使用,請在您的 .NET 專案中安裝 Aspose.Email NuGet 套件:

Install-Package Aspose.Email

此套件包含處理 OLM、MBOX 和 PST 檔案所需的所有類別。

將 OLM 轉換為 MBOX

MBOX 格式將電子郵件訊息儲存為串接的 MIME 條目,常被開源電子郵件客戶端使用。以下是一個簡單但高效的程式碼範例,將 OLM 資料夾中的所有訊息轉換為 MBOX 檔案。它使用以下 API 成員:

步驟

  1. 定義輸入 OLM 檔案和輸出 MBOX 檔案的檔案路徑。
  2. 使用 OlmStorage.FromFile 開啟 OLM 檔案。
  3. 使用 MboxrdStorageWriter 並指定輸出路徑和選項,建立 MBOX 寫入器。
  4. 以不區分大小寫的方式從 OLM 檔案中存取 “Inbox” 資料夾。
  5. 迭代 “Inbox” 資料夾中的所有 MAPI 訊息。
  6. 將每個 MAPI 訊息轉換為標準的 MailMessage 物件。
  7. 將每個轉換後的訊息寫入 MBOX 檔案。

程式碼範例

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

注意:
如果您希望每個資料夾產生一個 MBOX,請為每個 OLM 資料夾建立單獨的 writer。
如果您偏好單一封存檔,請重複使用同一個 MboxrdStorageWriter 實例,並如上方程式碼範例所示多次呼叫 WriteMessage

將 OLM 轉換為 PST

將 OLM 轉換為 PST 時,通常不僅需要複製訊息,還必須重新建立資料夾層級。以下程式碼範例示範如何使用 Aspose.Email for .NET,將 Outlook OLM 封存檔的資料夾結構與訊息轉換並複製到 Unicode PST 檔案。

關鍵成員

步驟

  1. 設定來源 OLM 檔案與目標 PST 檔案的路徑。
  2. 開啟 OLM 檔案以供讀取,並建立新的 PST 檔案以供寫入。
  3. 從 OLM 檔案取得頂層資料夾。
  4. 定義輔助函式,以在 PST 中尋找或建立與給定資料夾名稱相符的資料夾。
  5. 定義遞迴函式,以:
    • 為每個 OLM 資料夾建立或取得對應的 PST 資料夾。
    • 將所有訊息從 OLM 資料夾複製到 PST 資料夾。
    • 對 OLM 資料夾中的每個子資料夾呼叫自身,以維持資料夾樹狀結構。
  6. 對所有頂層 OLM 資料夾呼叫遞迴函式,使用 PST 的根資料夾作為父層。
  7. 將整個資料夾層級與訊息儲存至新的 PST 檔案,保留 MAPI 資料。

程式碼範例

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

重要: 新建立的 PST 預設已包含 Deleted Items 資料夾 — 請小心不要重複建立預設資料夾。

Note:

結論

在本文中,我們學習了如何使用 Aspose.Email for .NET 在 C# 中將 Outlook for Mac (OLM) 檔案轉換為 PST 和 MBOX 格式。我們探討了如何打開和處理 OLM 壓縮檔、提取訊息,並在匯出資料到新郵件儲存格式時保留資料夾層次結構。借助 Aspose.Email API,開發人員可以輕鬆自動化跨平台的電子郵件遷移,確保 Outlook for Mac、Outlook for Windows 與像 Thunderbird 這樣的開源客戶端之間的相容性。

如需進一步了解,請探索 Aspose.Email 文檔API 參考

其他資源

另請參閱