Convertendo OLM para PST
OLM é um formato de arquivo de banco de dados usado pelo Microsoft Outlook para Mac. Arquivos OLM armazenam mensagens de email, dados de calendário, contatos e configurações de aplicação, e não são suportados pelo Outlook para Windows. Para migrar uma caixa de correio do Outlook para Mac para o Outlook para Windows, você precisa converter o arquivo OLM para o Outlook PST formato. Aspose.Email para .NET permite fazer isso em código, sem precisar do Microsoft Outlook instalado.
Como a Conversão Funciona
Para converter um arquivo OLM para PST, siga estes passos:
- Crie uma instância do OlmStorage classe para abrir o arquivo OLM de origem.
- Crie um novo arquivo PST com o PersonalStorage.Create método.
- Implementar um
GetContainerClassmétodo que mapeia uma classe de mensagem para a classe de pasta (contêiner) correspondente, de modo que cada pasta seja criada com o tipo correto no PST. - Implementar um
AddToPstmétodo que lê recursivamente cada pasta e suas mensagens do arquivo OLM - usando EnumerateMapiMessages - e os adiciona ao PST na mesma ordem, usando oAddSubFoldereAddMessagemétodos de FolderInfo.
Exemplo de Código
O código a seguir mostra como converter um arquivo OLM para PST.
Método 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);
}
}
Método 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";
}
Método 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);
}
}