OLM'den PST'ye Dönüştürme

OLM Microsoft Outlook for Mac tarafından kullanılan bir veritabanı dosyası formatıdır. OLM dosyaları e-posta mesajları, takvim verileri, kişiler ve uygulama ayarlarını saklar ve Windows Outlook tarafından desteklenmez. Outlook for Mac’ten Outlook for Windows’a bir posta kutusunu taşımak için OLM dosyasını Outlook PST format. Aspose.Email for .NET bunu kod içinde yapmanıza olanak tanır, Microsoft Outlook yüklü olmasa bile.

Dönüşüm Nasıl Çalışır

OLM dosyasını PST’ye dönüştürmek için şu adımları izleyin:

  1. Şunun bir örneğini oluştur OlmStorage Kaynak OLM dosyasını açmak için sınıf.
  2. Şununla yeni bir PST dosyası oluşturun: PersonalStorage.Create metod.
  3. Implement a GetContainerClass method that maps a message class to the corresponding folder (container) class, so each folder is created with the correct type in the PST.
  4. Implement an AddToPst her klasörü ve mesajlarını OLM dosyasından rekürsif olarak okuyan method - şu methodu kullanarak EnumerateMapiMessages - ve aynı sırayla PST’ye ekler, şu methodu kullanarak AddSubFolder ve AddMessage methods of FolderInfo.

Kod Örneği

Aşağıdaki kod bir OLM dosyasını PST’ye dönüştürmeyi gösterir.

Main metodu:

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

GetContainerClass methodu:

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

AddToPst methodu:

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