انتقال داده‌های ایمیل از Outlook for Mac (OLM) به فرمت‌های به‌طور گسترده پشتیبانی‌شده مانند MBOX (برای Thunderbird / صندوق‌های ایمیل یونیکس) و PST (Outlook for Windows) یک کار رایج هنگام جابجایی بین پلتفرم‌ها است. Microsoft Outlook for Mac از فرمت OLM (Outlook for Mac Data File) برای ذخیره ایمیل‌ها، مخاطبان، تقویم‌ها و سایر موارد استفاده می‌کند. با این حال، انتقال این داده‌ها به محیط‌های مبتنی بر ویندوز یا سایر کلاینت‌های ایمیل اغلب نیاز به تبدیل فایل‌های 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 زیر استفاده می‌کند:

مراحل

  1. مسیرهای فایل برای فایل OLM ورودی و فایل MBOX خروجی را تعریف کنید.
  2. فایل OLM را با استفاده از OlmStorage.FromFile باز کنید.
  3. یک نویسنده MBOX با استفاده از MboxrdStorageWriter و مسیر خروجی و گزینه‌های مشخص شده ایجاد کنید.
  4. پوشه «Inbox» را از فایل OLM با جستجوی بدون حساسیت به حروف بزرگ/کوچک دسترسی پیدا کنید.
  5. در تمام پیام‌های MAPI موجود در پوشه «Inbox» حلقه بزنید.
  6. هر پیام MAPI را به یک شیء استاندارد MailMessage تبدیل کنید.
  7. هر پیام تبدیل‌شده را در فایل 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 یونیکد تبدیل و کپی کرد با استفاده از Aspose.Email for .NET.

Key members

Steps

  1. مسیرهای فایل برای فایل OLM منبع و فایل PST مقصد را تنظیم کنید.
  2. بایگانی OLM را برای خواندن باز کنید و یک فایل PST جدید برای نوشتن ایجاد کنید.
  3. پوشه‌های سطح بالایی را از بایگانی OLM بازیابی کنید.
  4. یک تابع کمکی تعریف کنید تا پوشهٔ مطابق را داخل PST برای یک نام پوشهٔ داده‌شده پیدا یا ایجاد کند.
  5. یک تابع بازگشتی تعریف کنید تا:
    • پوشهٔ PST متناظر را برای هر پوشهٔ OLM ایجاد یا دریافت کند.
    • تمام پیام‌ها را از پوشهٔ OLM به پوشهٔ PST کپی کند.
    • برای هر زیرپوشهٔ OLM خود را فراخوانی کند تا ساختار درختی پوشه حفظ شود.
  6. تابع بازگشتی را بر روی تمام پوشه‌های سطح بالای OLM صدا بزنید، به‌طوری که پوشهٔ ریشهٔ PST به‌عنوان والد استفاده شود.
  7. کل سلسله‌مراتبی پوشه‌ها و پیام‌ها را در فایل 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 تازه ایجاد شده به‌طور پیش‌فرض شامل یک پوشه Deleted Items است — بنابراین مراقب باشید که پوشه‌های پیش‌فرض را تکرار نکنید.

توجه:

  • حفظ انواع پوشه‌ها: زیرپوشه‌های OLM ممکن است به پوشه‌های ویژه خاص Outlook (صندوق ورودی، موارد ارسال‌شده، تقویم) نگاشته شوند. اگر می‌خواهید پوشه‌های IPM از پیش تعریف‌شده ایجاد کنید (به‌طوری که Outlook آن‌ها را به‌عنوان پوشه‌های استاندارد شناسایی کند)، از PersonalStorage.CreatePredefinedFolder یا GetPredefinedFolder بسته به سناریو استفاده کنید. CreatePredefinedFolder یک FolderInfo برمی‌گرداند. در صورت لزوم از enum StandardIpmFolder استفاده کنید.

  • عملکرد: AddMessages (افزودن دسته‌ای) نسبت به فراخوانی‌های متعدد AddMessage سریع‌تر است. جمع‌آوری پیام‌ها در دسته‌ها و استفاده از FolderInfo.AddMessages(IEnumerable) را برای کاهش I/O دیسک در نظر بگیرید.

نتیجه‌گیری

در این مقاله، نحوه تبدیل فایل‌های Outlook for Mac (OLM) به فرمت‌های PST و MBOX را در C# با استفاده از Aspose.Email for .NET آموختیم. ما بررسی کردیم که چگونه آرشیوهای OLM را باز و پردازش کنیم، پیام‌ها را استخراج کنیم و ساختار پوشه‌ها را هنگام صادرات داده‌ها به فرمت‌های جدید ذخیره‌سازی ایمیل حفظ کنیم. با API Aspose.Email، توسعه‌دهندگان می‌توانند به‌راحتی مهاجرت‌های ایمیل بین‌پلتفرمی را خودکار کنند و سازگاری بین Outlook for Mac، Outlook for Windows و مشتریان منبع باز مانند Thunderbird را تضمین نمایند.

برای جزئیات بیشتر، مستندات Aspose.Email و مرجع API را بررسی کنید.

منابع اضافی

موارد مرتبط