البرمجة مع Thunderbird
قراءة ملفات MBOX
Mozilla Thunderbird Thunderbird هو عميل بريد مفتوح المصدر ومتعدد المنصات، تم تطويره بواسطة مؤسسة Mozilla. يخزن الرسائل في بنية ملفات خاصة به، يدير فهارس الرسائل والمجلدات الفرعية عبر تنسيقات ملفات مملوكة. يمكن لـ Aspose.Email العمل مع بنى تخزين بريد Thunderbird. الـ MboxrdStorageReader الفئة تسمح للمطورين بقراءة الرسائل من ملف تخزين بريد Mozilla Thunderbird. يوضح هذا المقال كيفية قراءة الرسائل من تخزين بريد Thunderbird:
- افتح ملف تخزين Thunderbird في FileStream.
- إنشاء مثيل من الـ MboxrdStorageReader الفئة ومرر التيار السابق إلى المُنشئ.
- استدعِ ReadNextMessage() للحصول على الرسالة الأولى.
- استخدم نفس الـ ReadNextMessage() في حلقة while لقراءة جميع الرسائل.
- إغلاق جميع التدفقات.
يعرض مقطع الشيفرة التالي كيفية قراءة جميع الرسائل من تخزين بريد 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 class يوفر الـ 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. لكتابة الرسائل:
- افتح ملف تخزين Thunderbird في FileStream.
- إنشاء مثيل من الـ MboxrdStorageWriter الفئة ومرر التيار السابق إلى المُنشئ.
- قم بإعداد رسالة جديدة باستخدام الـ MailMessage فئة.
- استدعِ الـ WriteMessage() method ومرر ما سبق MailMessage مثِل لإضافة الرسالة إلى تخزين Thunderbird.
- إغلاق جميع التدفقات.
يوضح المقتطف البرمجي التالي كيفية كتابة الرسائل إلى تخزين بريد 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:
-
SplitInto(long chunkSize, string outputPath) - يُقسم تخزين Mbox إلى أجزاء أصغر بناءً على حجم الجزء المحدد.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - يُقسم تخزين Mbox إلى أجزاء أصغر مع بادئة اسم ملف محددة لكل جزء.
-
Cancel() - يوقف عملية التقسيم الجارية.
تُظهر أمثلة الشيفرة التالية كيفية تقسيم ملف 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();
};