OLM naar PST converteren
OLM is een database‑bestandformaat dat door Microsoft Outlook voor Mac wordt gebruikt. OLM‑bestanden slaan e‑mailberichten, agenda‑data, contacten en applicatie‑instellingen op, en worden niet ondersteund door Outlook voor Windows. Om een postvak van Outlook voor Mac naar Outlook voor Windows te migreren, moet u het OLM‑bestand naar het Outlook PST formaat. Aspose.Email voor .NET laat u dit in code doen, zonder Microsoft Outlook geïnstalleerd te hebben.
Hoe de conversie werkt
Om een OLM‑bestand naar PST te converteren, volg deze stappen:
- Maak een instantie van de OlmStorage klasse om het bron‑OLM‑bestand te openen.
- Maak een nieuw PST‑bestand met de PersonalStorage.Create methode.
- Implementeer een
GetContainerClassmethode die een berichtklasse aan de bijbehorende map‑ (container‑)klasse koppelt, zodat elke map in de PST met het juiste type wordt aangemaakt. - Implementeer een
AddToPstmethode die recursief elke map en de bijbehorende berichten uit het OLM‑bestand leest – met behulp van EnumerateMapiMessages - en voegt ze toe aan de PST in dezelfde volgorde, met behulp van deAddSubFolderenAddMessagemethoden van FolderInfo.
Codevoorbeeld
De volgende code toont hoe een OLM‑bestand naar PST kan worden geconverteerd.
Main‑methode:
// 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-methode:
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-methode:
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);
}
}