העברת נתוני דוא"ל מ-Outlook for Mac (OLM) לפורמטים נתמכים באופן רחב כגון MBOX (ל‑Thunderbird / תיבות דואר Unix) ו-PST (Outlook for Windows) היא משימה נפוצה בעת מעבר בין פלטפורמות. Microsoft Outlook for Mac משתמש בפורמט OLM (Outlook for Mac Data File) לאחסון הודעות דוא"ל, אנשי קשר, לוחות שנה ופריטים אחרים. עם זאת, העברת נתונים אלה לסביבות מבוססות Windows או ללקוחות דוא"ל אחרים דורשת לעיתים המרה של קבצי OLM לפורמטים נתמכים באופן אוניברסלי כגון MBOX (שמשמש לקוחות כגון Thunderbird ו‑Apple Mail) או PST (Outlook Personal Storage Table for Windows).
במאמר זה נציג כיצד להמיר קבצי OLM לפורמטים PST ו‑MBOX ב‑C# באמצעות Aspose.Email for .NET, API חזק שמפשט משימות מורכבות של העברת דוא"ל באופן תכנותי. תלמדו כיצד לפתוח קבצי OLM, לחלץ הודעות, לשמור על היררכיית התיקיות וליצור ארכיוני דוא"ל ניידים למספר פלטפורמות.
שימוש ב-Aspose.Email for .NET להמרה
[Aspose.Email for .NET][] מספק תכונות מקיפות לעבודה עם פורמטים שונים של דוא"ל, כולל OLM, MBOX ו‑PST. הוא מפשט משימות המרה מורכבות עם ה‑API האינטואיטיבי שלו והתיעוד הנרחב. להלן נפרט את הצעדים להמרת OLM ל‑MBOX ול‑PST באמצעות C#.
כדי להתחיל, התקן את חבילת NuGet של Aspose.Email בפרויקט .NET שלך:
Install-Package Aspose.Email
חבילה זו כוללת את כל המחלקות הדרושות לטיפול בקבצי OLM, MBOX ו‑PST.
המרת OLM ל-MBOX
פורמט MBOX מאחסן הודעות דוא"ל ככניסות MIME משולבות, נפוץ בשימוש על ידי לקוחות דוא"ל קוד פתוח. למטה נמצא דוגמת קוד פשוטה אך יעילה שממירה את כל ההודעות מתיקיית OLM לקובץ MBOX. היא משתמשת בחברי ה‑API הבאים:
- OlmStorage.FromFile(…) - פותח ארכיון OLM ומספק גישה לעץ התיקיות והפריטים שבו. ניתן להשתמש בו למיפוי תיקיות או לחילוץ הודעות מקובץ OLM.
- GetFolder(string name, bool ignoreCase) - מחזיר OlmFolder עבור שם התיקייה המבוקש.
- OlmFolder.EnumerateMapiMessages() - מעביר על פריטי MapiMessage באותה תיקייה.
- MapiMessage.ToMailMessage(MailConversionOptions) - ממיר MapiMessage ל-MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - כותב MailMessage בפורמט MIME לזרם MBOX.
שלבים
- הגדר את נתיבי הקבצים עבור קובץ ה‑OLM הקלט וקובץ ה‑MBOX הפלט.
- פתח את קובץ ה‑OLM באמצעות
OlmStorage.FromFile. - צור כותב MBOX באמצעות
MboxrdStorageWriterעם נתיב הפלט והאפשרויות שצוינו. - גש לתיקיית “Inbox” מקובץ ה‑OLM באמצעות חיפוש שאינו רגיש לאותיות.
- עבור על כל הודעות MAPI בתיקיית “Inbox”.
- המר כל הודעת MAPI לאובייקט
MailMessageסטנדרטי. - כתוב כל הודעה שהומרה לקובץ ה‑MBOX.
דוגמת קוד
var olmPath = @"C:\data\archive.olm";
var mboxPath = @"C:\data\output.mbox";
// Load OLM file using OlmStorage
using (var olm = OlmStorage.FromFile(olmPath))
using (var mboxWriter = new MboxrdStorageWriter(mboxPath, new MboxSaveOptions()))
{
// Get the folder (case-insensitive example)
var inbox = olm.GetFolder("Inbox", true);
// Iterate MAPI messages (returns MapiMessage objects)
foreach (MapiMessage mapi in inbox.EnumerateMapiMessages())
{
// Convert to MailMessage and write to MBOX
var mail = mapi.ToMailMessage(new MailConversionOptions());
mboxWriter.WriteMessage(mail);
}
}
הערה:
אם אתה רוצה קובץ MBOX אחד לכל תיקייה, צור כותב נפרד עבור כל תיקיית OLM.
אם אתה מעדיף ארכיון יחיד, השתמש מחדש במופע של MboxrdStorageWriter וקרא ל-WriteMessage באופן חוזר כפי שמוצג בדוגמת הקוד למעלה.
המרת OLM ל‑PST
המרת OLM ל‑PST לעיתים דורשת לא רק העתקת הודעות אלא גם יצירת היררכיית התיקיות מחדש. דוגמת הקוד שלהלן מציגה כיצד להמיר ולהעתיק את מבנה התיקיות וההודעות מקובץ ארכיון OLM של Outlook לקובץ PST בפורמט Unicode באמצעות Aspose.Email for .NET.
חברי מפתח
- PersonalStorage.Create(path, FileFormatVersion.Unicode) – יוצר קובץ PST Unicode חדש ומחזיר מופע של PersonalStorage. השתמש ב-PersonalStorage.Load(…) כדי לפתוח PSTים קיימים. המחלקה PersonalStorage היא נקודת הכניסה לעבודה עם קבצי PST.
- PersonalStorage.RootFolder – מספקת את תיקיית השורש FolderInfo של ה‑PST. השתמש ב-FolderInfo.AddSubFolder(name) כדי ליצור תתי‑תיקיות. FolderInfo.GetSubFolders() מחזירה את הילדים כך שניתן לבדוק האם כבר קיימת תיקייה עם אותו שם.
- OlmStorage.GetFolders() – מחזירה את האוסף של OlmFolder ברמת העל (היררכיית התיקיות של OLM). המאפיין OlmFolder.SubFolders מכיל תתי‑תיקיות (כך שניתן לרדת בצורה רקורסיבית).
- OlmFolder.EnumerateMapiMessages() – מחזירה מופעי MapiMessage.
- FolderInfo.AddMessage(MapiMessage) – מוסיפה MapiMessage לתיקיית PST.
שלבים
- הגדר את נתיבי הקבצים עבור קובץ ה‑OLM המקור וקובץ ה‑PST היעד.
- פתח את ארכיון ה‑OLM לקריאה וצור קובץ PST חדש לכתיבה.
- קבל את התיקיות ברמת העל מהארכיון OLM.
- הגדר פונקציית עזר למציאת תיקייה תואמת או יצירתה בתוך ה‑PST עבור שם תיקייה נתון.
- הגדר פונקציה רקורסיבית כדי:
- ליצור או לקבל את תיקיית PST המתאימה לכל תיקיית OLM.
- להעתיק את כל ההודעות מתיקיית OLM לתיקיית PST.
- לקרוא לעצמה עבור כל תת‑תיקייה בתיקיית OLM כדי לשמור על מבנה העץ.
- קרא לפונקציה הרקורסיבית על כל תיקיות העל של OLM, תוך שימוש בתיקיית השורש של PST כהורה.
- שמור את כל היררכיית התיקיות וההודעות בקובץ PST החדש, תוך שמירה על נתוני MAPI.
דוגמת קוד
var olmPath = @"C:\data\archive.olm";
var pstPath = @"C:\data\output.pst";
// Create a new PST file
using (var olm = OlmStorage.FromFile(olmPath))
using (var pst = PersonalStorage.Create(pstPath, FileFormatVersion.Unicode))
{
// Get top-level folders in OLM
var rootFolders = olm.GetFolders();
// Helper: map OlmFolder -> FolderInfo in PST by recursively creating subfolders
FolderInfo GetOrCreatePstFolder(FolderInfo parentPstFolder, string folderName)
{
// Try to find existing subfolder (case-insensitive)
foreach (var sub in parentPstFolder.GetSubFolders())
{
if (string.Equals(sub.DisplayName, folderName, StringComparison.OrdinalIgnoreCase))
return sub;
}
// Create new subfolder
return parentPstFolder.AddSubFolder(folderName);
}
// Recursive traversal
void ProcessOlmFolder(OlmFolder olmFolder, FolderInfo pstParent)
{
// Create / get the corresponding PST folder
var pstFolder = GetOrCreatePstFolder(pstParent, olmFolder.Name);
// Copy messages: OlmFolder.EnumerateMapiMessages returns MapiMessage instances
foreach (var mapi in olmFolder.EnumerateMapiMessages())
{
// AddMessage preserves MAPI data into PST
pstFolder.AddMessage(mapi);
}
// Recurse into OLM subfolders (OlmFolder.SubFolders property)
foreach (var child in olmFolder.SubFolders)
{
ProcessOlmFolder(child, pstFolder);
}
}
// Note: PST.RootFolder exists; create top-level folders under it.
foreach (var top in rootFolders)
{
// Skip creating a duplicate for default PST root folder names if needed
ProcessOlmFolder(top, pst.RootFolder);
}
}
Important: קובץ PST שנוצר זה עתה כבר כולל תיקיית Deleted Items כברירת מחדל — ולכן יש להיזהר שלא לשכפל תיקיות ברירת מחדל.
הערה:
שמירת סוגי תיקיות: תת‑תיקיות OLM עשויות למפות לתיקיות מיוחדות ספציפיות של Outlook (תיבת דואר נכנס, פריטים שנשלחו, לוח שנה). אם ברצונך ליצור תיקיות IPM מוגדרות מראש (כך ש‑Outlook יזהה אותן כתיקיות סטנדרטיות), השתמש ב‑PersonalStorage.CreatePredefinedFolder או ב‑GetPredefinedFolder בהתאם לתרחיש. CreatePredefinedFolder מחזיר FolderInfo. השתמש במניין StandardIpmFolder כאשר מתאים.
ביצועים: AddMessages (הוספה גורפת) מהיר יותר מאשר קריאות מרובות ל‑AddMessage. שקול לאסוף הודעות במנות ולהשתמש ב‑FolderInfo.AddMessages(IEnumerable) כדי להפחית קריאות דיסק.
סיכום
במאמר זה למדנו כיצד להמיר קבצי Outlook for Mac (OLM) לפורמטים PST ו‑MBOX ב‑C# באמצעות Aspose.Email for .NET. חקרנו כיצד לפתוח ולעבד ארכיוני OLM, לחלץ הודעות ולשמר היררכיות תיקיות בזמן יצוא הנתונים לפורמטים חדשים של אחסון דואר. עם Aspose.Email API, מפתחים יכולים בקלות לאוטומט תהליכי הגירת דואר חוצי פלטפורמות, ולהבטיח תאימות בין Outlook for Mac, Outlook for Windows, ו‑לקוחות קוד פתוח כגון Thunderbird.
לפרטים נוספים, עיינו בתיעוד Aspose.Email ומפרט API.
