تُعد ترحيل بيانات البريد الإلكتروني من 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. يبسط مهام التحويل المعقدة بفضل واجهته البرمجية البديهية ووثائقها الواسعة. أدناه، سنستعرض الخطوات لتحويل OLM إلى MBOX و PST باستخدام C#.
للبدء، قم بتثبيت حزمة Aspose.Email NuGet في مشروع .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 غالبًا ليس فقط نسخ الرسائل بل أيضًا إعادة إنشاء هيكل المجلدات. يوضح مثال الكود أدناه كيفية تحويل ونسخ هيكل المجلدات والرسائل من ملف أرشيف Outlook OLM إلى ملف 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);
}
}
هام: تم إنشاء PST جديد يتضمن مجلد العناصر المحذوفة بشكل افتراضي — لذا احرص على عدم تكرار المجلدات الافتراضية.
ملاحظة:
الحفاظ على أنواع المجلدات: قد يتم ربط المجلدات الفرعية لملف 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.
