Chuyển đổi OLM sang PST

OLM là định dạng tệp cơ sở dữ liệu được Microsoft Outlook cho Mac sử dụng. Tệp OLM lưu trữ tin nhắn email, dữ liệu lịch, danh bạ và cài đặt ứng dụng, và chúng không được Outlook cho Windows hỗ trợ. Để di chuyển hộp thư từ Outlook cho Mac sang Outlook cho Windows, bạn cần chuyển đổi tệp OLM sang Outlook PST định dạng. Aspose.Email cho .NET cho phép bạn thực hiện điều này bằng mã, mà không cần cài đặt Microsoft Outlook.

Cách Thức Chuyển Đổi Hoạt Động

Để chuyển đổi tệp OLM sang PST, thực hiện các bước sau:

  1. Tạo một đối tượng của OlmStorage lớp để mở tệp OLM nguồn.
  2. Tạo một tệp PST mới với PersonalStorage.Create phương thức.
  3. Triển khai một GetContainerClass phương thức ánh xạ lớp tin nhắn sang lớp thư mục (container) tương ứng, để mỗi thư mục được tạo với kiểu đúng trong PST.
  4. Triển khai một AddToPst phương thức đọc đệ quy mỗi thư mục và các tin nhắn của nó từ tệp OLM - sử dụng EnumerateMapiMessages - và thêm chúng vào PST theo cùng thứ tự, sử dụng AddSubFolderAddMessage phương thức của FolderInfo.

Mẫu Mã

Đoạn mã sau cho thấy cách chuyển đổi tệp OLM sang PST.

Phương thức Main:

// create an instance of OlmStorage class to open the source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
    // recursively read each folder and its messages
    // and add them to the PST in the same order
    foreach (var olmFolder in olm.FolderHierarchy)
    {
        AddToPst(pst.RootFolder, olmFolder);
    }
}

Phương Thức 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";
}

Phương Thức 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);
    }
}