Conversion OLM en PST
OLM est un format de fichier de base de données utilisé par Microsoft Outlook pour Mac. Les fichiers OLM stockent les messages électroniques, les données de calendrier, les contacts et les paramètres de l’application, et ne sont pas pris en charge par Outlook pour Windows. Pour migrer une boîte aux lettres d’Outlook pour Mac vers Outlook pour Windows, vous devez convertir le fichier OLM au format Outlook PST format. Aspose.Email pour .NET vous permet de faire cela par code, sans Outlook installé.
Comment la conversion fonctionne
Pour convertir un fichier OLM en PST, suivez ces étapes :
- Créez une instance de la OlmStorage classe pour ouvrir le fichier OLM source.
- Créez un nouveau fichier PST avec le PersonalStorage.Create méthode.
- Implémenter un
GetContainerClassméthode qui fait correspondre une classe de message à la classe de dossier (conteneur) correspondante, afin que chaque dossier soit créé avec le type correct dans le PST. - Implémenter un
AddToPstméthode qui lit récursivement chaque dossier et ses messages depuis le fichier OLM - en utilisant EnumerateMapiMessages - et les ajoute au PST dans le même ordre, en utilisant leAddSubFolderetAddMessageméthodes de FolderInfo.
Exemple de code
Le code suivant montre comment convertir un fichier OLM en PST.
Méthode 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éthode 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éthode 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);
}
}