برنامه‌نویسی با Thunderbird

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

Mozilla Thunderbird یک کلاینت ایمیل منبع باز و چندسکویی است که توسط بنیاد Mozilla توسعه یافته است. ایمیل‌ها را در ساختار فایل خود ذخیره می‌کند و شاخص‌های پیام‌ها و زیرپوشه‌ها را از طریق فرمت‌های فایل مالکیتی مدیریت می‌نماید. Aspose.Email می‌تواند با ساختارهای ذخیره‌سازی ایمیل Thunderbird کار کند. The MboxrdStorageReader کلاسی که به توسعه‌دهندگان امکان خواندن پیام‌ها از فایل ذخیره‌سازی ایمیل 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();

دریافت ویژگی‌های پیام

MboxMessageInfo کلاس شامل ویژگی‌های زیر برای بازیابی اطلاعات درباره یک پیام است:

  • DateTime Date - دریافت تاریخ پیام
  • MailAddress From - دریافت آدرس فرستنده
  • string Subject - دریافت موضوع پیام
  • MailAddressCollection به - دریافت مجموعه آدرس هایی که گیرندگان پیام را شامل می‌شود
  • MailAddressCollection CC - دریافت مجموعه آدرس هایی که گیرندگان CC را شامل می‌شود
  • MailAddressCollection Bcc - دریافت مجموعه آدرس هایی که گیرندگان BCC پیام را شامل می‌شود
MboxStorageReader reader = MboxStorageReader.CreateReader(fileName, new MboxLoadOptions());

foreach (var mboxMessageInfo in reader.EnumerateMessageInfo())
{
    Console.Writeline($"Subject: {mboxMessageInfo.Subject}");
    Console.Writeline($"Date: {mboxMessageInfo.Date}");
    Console.Writeline($"From: {mboxMessageInfo.From}");
    Console.Writeline($"To: {mboxMessageInfo.To}");
    Console.Writeline($"CC: {mboxMessageInfo.CC}");
    Console.Writeline($"Bcc: {mboxMessageInfo.Bcc}");
}

استخراج پیام‌ها از MBOX بر اساس شناسه‌ها

این MboxStorageReader کلاس شامل EnumerateMessageInfo() متد که به شما امکان می‌دهد از هر پیام در یک فایل MBOX عبور کنید. با استفاده از این متد می‌توانید پیام‌های تک تک را بدون نیاز به مرور مکرر کل ذخیره‌سازی استخراج کنید. این کار عملکرد را بهبود می‌بخشد و زمان پردازش را کاهش می‌دهد.

این MboxMessageInfo کلاس فراهم می‌کند EntryId ویژگی که دسترسی به شناسه‌های یکتای هر پیام در فایل MBOX را فراهم می‌کند. این شناسه می‌تواند در پایگاه داده ذخیره شود یا به‌عنوان مرجع برای یافتن سریع و استخراج پیام‌های خاص زمانی که نیاز باشد استفاده شود.

این ExtractMessage(string id) متد در MboxStorageReader کلاسی که به توسعه‌دهندگان امکان استخراج پیام‌ها بر اساس EntryId یکتا را می‌دهد. با ExtractMessage(string id) متد، می‌توانید از EntryId ذخیره‌شده برای بازیابی پیام مربوطه استفاده کنید و عملیات‌های اضافی را با آن انجام دهید.

نمونه کد زیر نشان می‌دهد چگونه پیام‌ها را از یک فایل MBOX با استفاده از شناسه‌ها استخراج کنید:

MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());

foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
    MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}

پیکربندی گزینه‌های بارگذاری هنگام خواندن پیام‌ها از MBOX

ویژگی‌های زیر به شما امکان می‌دهند گزینه‌های مختلف مرتبط با بارگذاری و پردازش پیام‌ها را مشخص کنید:

  • ویژگی MailStorageConverter.MboxMessageOptions - دریافت یا تنظیم گزینه‌های بارگذاری ایمیل هنگام تجزیه یک ذخیره‌سازی Mbox.

  • متد MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) - پارامتر EmlLoadOptions گزینه‌ها را هنگام خواندن پیام از ذخیره‌سازی Mbox مشخص می‌کند.

var reader = new MboxrdStorageReader(fileName, new MboxLoadOptions());
// Read messages preserving tnef attachments.
var eml = reader.ReadNextMessage(new EmlLoadOptions {PreserveTnefAttachments = true});
MailStorageConverter.MboxMessageOptions(new EmlLoadOptions {PreserveTnefAttachments = true});
// Convert messages from mbox to pst preserving tnef attachments.
var pst = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

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

گزینه‌ی رمزگذاری برای کلاس MboxrdStorageReader موجود است. این گزینه‌ها بارگذاری فایل 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();
    }
}

تبدیل MBOX به PST با حفظ یا حذف امضا

برای حذف امضا از یک فایل در طول فرآیند تبدیل، تنظیم کنید MboxToPstConversionOptions.RemoveSignature ویژگی را به true تنظیم کنید.

نمونه کد زیر نشان می‌دهد چگونه از این خصوصیت استفاده کنید:

var pstDataStream = new MemoryStream();
var personalStorage = PersonalStorage.Create(pstDataStream, FileFormatVersion.Unicode);
MailStorageConverter.MboxToPst(new MboxrdStorageReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), new MboxLoadOptions()),
personalStorage,
    "Inbox",
new MboxToPstConversionOptions() { RemoveSignature = true });

نوشتن فایل‌های MBOX

این MboxrdStorageWriter کلاسی که امکان نوشتن پیام‌های جدید به فایل ذخیره‌سازی ایمیل Thunderbird را فراهم می‌کند. برای نوشتن پیام‌ها:

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

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

// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Write);

// Initialize MboxStorageWriter and pass the above stream to it
var writer = new MboxrdStorageWriter(stream, false);
// Prepare a new message using the MailMessage class
var message = new MailMessage("from@domain.com", "to@domain.com", Guid.NewGuid().ToString(), "added from Aspose.Email");
message.IsDraft = false;
// Add this message to storage
writer.WriteMessage(message);
// Close all related streams
writer.Dispose();
stream.Close();

تقسیم ذخیره‌سازی MBOX/لغو عملیات تقسیم

Aspose.Email روش‌هایی برای تقسیم ذخیره‌سازی Mbox به بخش‌های کوچکتر فراهم می‌کند، که کار با آرشیوهای بزرگ ایمیل را آسان‌تر می‌سازد. بسته به نسخه .NET که استفاده می‌کنید، روش‌های موجود و پارامترهای آنها ممکن است متفاوت باشد. در زیر روش‌های MboxStorageReader کلاسی که برای نسخه‌های .NET Framework 4.5 و .NET Core و همچنین نسخه‌های زیر 4.5 استفاده می‌شود.

اعضا برای نسخه‌های .NET Framework 4.5 و .NET Core:

  • SplitInto(long chunkSize, string outputPath, CancellationToken token) - فضای ذخیره‌سازی Mbox را به بخش‌های کوچکتر بر اساس اندازه تکه مشخص تقسیم می‌کند.

  • پارامترها:

    • chunkSize: اندازه تقریبی هر تکه به بایت.
    • outputPath: مسیر پوشه‌ای که در آن تکه‌ها ایجاد می‌شوند.
    • token: یک CancellationToken که امکان لغو ممکن عملیات را می‌دهد.
  • SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - فضای ذخیره‌سازی Mbox را به بخش‌های کوچکتر تقسیم می‌کند با یک پیشوند نام فایل مشخص برای هر بخش.

  • پارامترها:

    • chunkSize: اندازه تقریبی هر تکه به بایت.
    • outputPath: مسیر پوشه‌ای که در آن تکه‌ها ایجاد می‌شوند.
    • partFileNamePrefix: پیشوندی که به نام فایل هر بخش اضافه می‌شود.
    • token: یک CancellationToken که امکان لغو ممکن عملیات را می‌دهد.

اعضا برای نسخه‌های .NET Framework زیر 4.5:

نمونه کدهای زیر نشان می‌دهند چگونه یک فایل MBOX را به بخش‌هایی تقسیم کنید در حالی که فرآیند حداکثر به پنج بخش محدود می‌شود و از یک مکانیزم لغو استفاده می‌کند:

.NET Framework 4.5 و .NET Core:

int partCount = 0;

var tokenSource = new CancellationTokenSource();

var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });

// Subscribe to events
mbox.MboxFileCreated += (sender, e) =>
{
    partCount++;
    if (partCount >= 5)
        tokenSource.Cancel();
};

System.Threading.Tasks.Task task = mbox.SplitInto(10000000, outputPath, tokenSource.Token);
task.Wait();

.NET Framework زیر 4.5:

int partCount = 0;
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
mbox.SplitInto(10000000, outputPath);

mbox.MboxFileCreated += (sender, e) =>
{
    partCount++;
    if (partCount >= 5)
        mbox.Cancel();
};