خواندن فایل‌های MBOX

قابلیت‌های خواندن Aspose.Email

Mozilla Thunderbird یک کلاینت ایمیل متن باز و چند پلتفرمی است که توسط بنیاد Mozilla توسعه یافته است. این برنامه ایمیل‌ها را در ساختار فایل خود ذخیره می‌کند، ایندکس‌های پیام‌ها و زیرپوشه‌ها را از طریق فرمت‌های فایل مالکیتی مدیریت می‌کند. Thunderbird برای هر پوشه ایمیل (مثلاً Inbox، Sent، Trash) یک فایل .mbox ایجاد می‌کند و این فایل‌ها را در پوشه پروفایل کاربر ذخیره می‌کند. هر فایل تمام پیام‌های آن پوشه را به‌صورت ترکیبی در خود دارد.

Aspose.Email برای .NET APIهایی برای خواندن پیام‌ها از فایل‌های .mbox Thunderbird با استفاده از MboxrdStorageReader کلاسی که به توسعه‌دهندگان اجازه می‌دهد:

  • باز کردن و خواندن پیام‌ها به‌صورت متوالی، یکی‌یکی
  • دریافت متادیتا مانند موضوع، فرستنده، گیرنده، تاریخ و غیره، بدون بارگذاری محتوای کامل
  • استخراج پیام‌های جداگانه با استفاده از شناسه‌های یکتا (EntryId)
  • حفظ رمزگذاری، پیوست‌های TNEF و قالب‌بندی
  • فایل‌ها را به‌صورت ناهمزمان بخوانید برای عملکرد بهتر در آرشیوهای بزرگ

خواندن فایل‌های MBOX به‌صورت هم‌زمان

خواندن پیام‌ها از فایل ذخیره‌سازی ایمیل Mozilla Thunderbird. این مقاله نشان می‌دهد چگونه پیام‌ها را از ذخیره‌سازی ایمیل Thunderbird بخوانید:

  1. فایل ذخیره‌سازی Thunderbird را در FileStream باز کنید.
  2. یک نمونه از MboxrdStorageReader کلاس و جریان فوق را به سازنده پاس دهید.
  3. فراخوانی کنید ReadNextMessage() برای دریافت اولین پیام استفاده کنید.
  4. از همان ReadNextMessage() در یک حلقه while برای خواندن تمام پیام‌ها.
  5. تمام جریان‌ها را ببندید.

قطعه کد زیر نشان می‌دهد چگونه تمام پیام‌ها را از ذخیره‌سازی ایمیل Thunderbird بخوانید.

// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();

// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Create an instance of the MboxrdStorageReader class and pass the stream
var reader = new MboxrdStorageReader(stream, false);
// Start reading messages
var message = reader.ReadNextMessage();

// Read all messages in a loop
while (message != null)
{
    // Manipulate message - show contents
    Console.WriteLine("Subject: " + message.Subject);
    // Save this message in EML or MSG format
    message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
    message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);

    // Get the next message
    message = reader.ReadNextMessage();
}

// Close the streams
reader.Dispose();
stream.Close();

خواندن فایل‌های MBOX به‌صورت ناهمزمان

برای ارتقاء عملکرد و پاسخگویی هنگام پردازش فایل‌های بزرگ MBOX، Aspose.Email برای .NET خواندن ناهمزمان MBOX را از طریق CreateReaderAsync متد. این ویژگی مخصوصاً در برنامه‌هایی که آرشیوهای بزرگ ایمیل را مدیریت می‌کنند یا عملیات‌های وابسته به I/O را در رشته‌های پس‌زمینه یا سرویس‌های وب اجرا می‌کنند مفید است. نمونه کد زیر نشان می‌دهد چگونه می‌توانید پیام‌های ایمیل را به‌صورت ناهمزمان از یک فایل MBOX با استفاده از یک Aspose.Email storage reader بخوانید:

string mboxFilePath = "emails.mbox";

    // Create a reader for the MBOX file asynchronously
    using (var reader = await MboxrdStorageReader.CreateReaderAsync(mboxFilePath, CancellationToken.None))
    {
    Console.WriteLine("MBOX reader initialized.");

    // Read messages from the MBOX file
        while (reader.ReadNextMessage() is var message && message != null)
        {
            Console.WriteLine($"Subject: {message.Subject}");
        }
    }

خواندن پیام‌های ایمیل به صورت دسته‌ای با پشتیبانی از صفحه‌بندی

دسترسی صفحه‌بندی‌شده به پیام‌های ذخیره‌شده در فایل‌های صندوق‌پست را به دست آورید. این قابلیت به توسعه‌دهندگان اجازه می‌دهد آرشیوهای بزرگ ایمیل را به‌صورت کارآمدتر پردازش کنند با بازیابی پیام‌ها در بخش‌های کوچک‌تر - عملکرد را بهبود می‌بخشد و بار حافظه را کاهش می‌دهد. از متدهای زیر استفاده کنید برای MboxStorageReader کلاس:

  • EnumerateMessages(int startIndex, int count) - یک مجموعه قابل شمارش از نمونه‌های MailMessage را برمی‌گرداند که از شاخص مشخص‌شده شروع می‌شود و توسط تعداد داده‌شده محدود می‌گردد.

  • EnumerateMessageInfo(int startIndex, int count) - یک مجموعه قابل شمارش از اشیای MboxMessageInfo را فقط با متاداده‌ها برمی‌گرداند، همچنین بر اساس شاخص و تعداد صفحه‌بندی می‌شود.

نمونه کد زیر نشان می‌دهد چگونه می‌توان یک بازه مشخص از پیام‌ها را از آرشیو ایمیل با تعریف یک شاخص شروع و اندازه‌ی دسته‌ای خواند. در این مثال، متد ۱۰ پیام را از شاخص ۰ شروع می‌کند.

using Aspose.Email.Storage.Mbox;
using Aspose.Email;

var reader = MboxStorageReader.CreateReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10

foreach (var message in reader.EnumerateMessages(startIndex, count))
{
    Console.WriteLine("Subject: " + message.Subject);
}

تنظیم رمزگذاری متن مورد ترجیح هنگام بارگذاری فایل‌های MBOX برای خواندن

گزینه رمزگذاری برای MboxrdStorageReader class. این گزینه‌های اضافی برای بارگذاری فایل mbox فراهم می‌کند و اطمینان می‌دهد که پیام‌های دارای محتوای رمزگذاری‌شده به‌درستی خوانده و پردازش شوند. قطعه کد زیر نشان می‌دهد چگونه می‌توانید رمزگذاری متنی که نیازهای شما را برآورده می‌کند تنظیم کنید:

var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();

به‌دست آوردن کل تعداد پیام‌ها از فایل‌های MBOX

این MboxrdStorageReader کلاس قابلیت خواندن تعداد موارد موجود در یک فایل MBox را فراهم می‌کند. می‌توان از این ویژگی برای توسعه برنامه‌هایی استفاده کرد که پیشرفت فعالیت را هنگام پردازش چنین فایلی نشان می‌دهند.

// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();

using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
    Console.WriteLine("Total number of messages in Mbox file: " + reader.GetTotalItemsCount());
}

دریافت اندازه پیام فعلی

using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
    MailMessage msg;
    while ((msg = reader.ReadNextMessage()) != null)
    {
        long currentDataSize = reader.CurrentDataSize;

        msg.Dispose();
    }
}