البرمجة مع Thunderbird

قراءة الرسائل من MBOX

Mozilla Thunderbird Thunderbird هو عميل بريد مفتوح المصدر ومتعدد المنصات، تم تطويره بواسطة مؤسسة Mozilla. يخزن الرسائل في بنية ملفات خاصة به، يدير فهارس الرسائل والمجلدات الفرعية عبر تنسيقات ملفات مملوكة. يمكن لـ Aspose.Email العمل مع بنى تخزين بريد Thunderbird. الـ MboxrdStorageReader class تتيح للمطورين قراءة الرسائل من ملف تخزين بريد Mozilla Thunderbird. يوضح هذا المقال كيفية قراءة الرسائل من تخزين بريد Thunderbird:

  1. افتح ملف تخزين Thunderbird في FileStream.
  2. إنشاء مثيل من الـ MboxrdStorageReader الفئة ومرر التيار السابق إلى المُنشئ.
  3. استدعِ ReadNextMessage() للحصول على الرسالة الأولى.
  4. استخدم نفس الـ ReadNextMessage() في حلقة while لقراءة جميع الرسائل.
  5. إغلاق جميع التدفقات.

يعرض مقطع الشيفرة التالي كيفية قراءة جميع الرسائل من تخزين بريد Thunderbird.

//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
    MboxLoadOptions lo = new MboxLoadOptions();
    lo.setLeaveOpen(false);
    try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
        MailMessage msg;
        String[] fromMarker = {null};
        while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
            System.out.println(fromMarker[0]);
        }
    }
}

تهيئة خيارات التحميل عند قراءة الرسائل من MBOX

تتيح واجهة Aspose.Email API التلاعبات التالية بالرسائل عند قراءتها من ملف MBOX:

تحويل الرسائل من MBOX إلى PST مع الحفاظ على مرفقات TNEF

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

MailStorageConverter.MboxMessageOptions() خاصية - تحصل أو تعين خيارات تحميل البريد عند تحليل تخزين Mbox.

قراءة الرسائل مع الحفاظ على مرفقات TNEF

MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);

MboxrdStorageReader.readNextMessage(EmlLoadOptions options) method - معلمة EmlLoadOptions تحدد خيارات عند قراءة رسالة من تخزين Mbox.

إعداد تعداد للرسائل مع الحفاظ على مرفقات TNEF

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
    // do something
}

MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) method - يحدد EmlLoadOptions عند قراءة رسالة من تخزين Mbox.

استخراج الرسائل من MBOX باستخدام المعرفات

أحيانًا يتطلب استخراج رسائل محددة باستخدام المعرفات. على سبيل المثال، يخزن تطبيقك المعرفات في قاعدة بيانات ويستخرج رسالة عند الطلب. هذه طريقة فعّالة لتجنب المرور عبر كامل التخزين في كل مرة للعثور على رسالة محددة لاستخراجها. لتنفيذ هذه الميزة لملفات MBOX، توفر Aspose.Email الطرق والفئات التالية:

يعرض مثال الشيفرة أدناه كيفية استخراج الرسائل من MBOX باستخدام المعرفات:

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

for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
    MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}

ملاحظة: معرف الرسالة فريد داخل ملف التخزين. يتم إنشاء المعرفات بواسطة Aspose.Email ولا يمكن استخدامها في مكتبات أو تطبيقات معالجة MBOX التابعة لأطراف أخرى.

تصفية والبحث عن رسائل البريد في ملفات MBOX

يوفر Aspose.Email for Java القدرة على تصفية أو البحث عن الرسائل داخل ملفات MBOX باستخدام استعلام. يتيح ذلك استرجاع الرسائل التي تطابق معايير معينة فقط. بهذه الطريقة، يمكنك تحسين أداء التطبيق وقابليته للاستخدام عند التعامل مع ملفات MBOX الكبيرة.

يعرض مثال الشيفرة أدناه كيفية تنفيذ هذه الميزة من خلال تطبيق الطرق التالية:

  • enumerateMessages(MailQuery query) - يُرجع مجموعة قابلة للتعداد من كائنات MailMessage التي تطابق الاستعلام المحدد.

  • enumerateMessageInfo(MailQuery query) - يُرجع مجموعة قابلة للتعداد من كائنات MboxMessageInfo التي تطابق الاستعلام المحدد.

MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());

for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
    System.out.println("Subject: " + message.getSubject());
}

استرجاع الرسائل على شكل صفحات من ملفات MBOX

يدعم Aspose.Email for Java استرجاع الرسائل من ملفات MBOX بطريقة مقسمة إلى صفحات. تتيح هذه الميزة معالجة فعّالة لملفات MBOX الكبيرة عن طريق استرجاع الرسائل دفعات أصغر، مما يقلل استهلاك الذاكرة ويحسن الأداء.

يعرض مثال الشيفرة أدناه كيفية تنفيذ هذه الميزة من خلال تطبيق الطرق التالية:

  • enumerateMessages(int startIndex, int count) - يسترجع عددًا محددًا من كائنات MailMessage بدءًا من فهرس معين.

  • enumerateMessageInfo(int startIndex, int count) - يسترجع عددًا محددًا من كائنات MboxMessageInfo بدءًا من فهرس معين.

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

for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
    System.out.println("Subject: " + message.getSubject());
}

كتابة الرسائل

الـ MboxrdStorageWriter الفئة توفر القدرة على كتابة رسائل جديدة إلى ملف تخزين بريد Thunderbird. لكتابة الرسائل:

  1. افتح ملف تخزين Thunderbird في FileStream.
  2. إنشاء مثيل من الـ MboxrdStorageWriter الفئة ومرر التيار السابق إلى المُنشئ.
  3. قم بإعداد رسالة جديدة باستخدام الـ MailMessage فئة.
  4. استدعِ الـ WriteMessage() method ومرر ما سبق MailMessage مثِل لإضافة الرسالة إلى تخزين Thunderbird.
  5. إغلاق جميع التدفقات.

يعرض مقطع الشيفرة التالي كيفية كتابة الرسائل إلى تخزين بريد Thunderbird.

//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
    try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
        MailMessage msg = MailMessage.load(dataDir + "Message.msg");
        String[] fromMarker = {null};
        writer.writeMessage(msg, fromMarker);
        System.out.println(fromMarker[0]);
    }
}

الحصول على العدد الكلي للرسائل من ملف MBox

الـ MboxrdStorageReader الفئة توفر القدرة على قراءة عدد العناصر المتاحة في ملف MBox. يمكن استخدام ذلك لتطوير تطبيقات لعرض تقدم النشاط أثناء معالجة هذا الملف.

MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
    System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}

الحصول على حجم الرسالة الحالية

FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
    MailMessage msg = null;
    while ((msg = reader.readNextMessage()) != null) {
        //returns the number of bytes read
        long currentDataSize = reader.getCurrentDataSize();
        System.out.println("Bytes read: " + currentDataSize);
    }
}

تعيين الترميز النصي المفضل عند تحميل ملفات Mbox

الـ setPreferredTextEncoding(Charset value) طريقة الـ MboxLoadOptions الفئة تحصل على أو تعيين الترميز المفضل للرسائل. أنشئ قارئًا لملف Mbox باستخدام خيارات التحميل المحددة وستُقرأ رسائلك ذات المحتوى المشفر وتُعالج بشكل صحيح. يُظهر مثال الشيفرة التالي كيفية تنفيذ هذه الميزة في مشروع:

MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();

تقسيم تخزين Mbox إلى أجزاء أصغر

توفر Aspose.Email المكونات التالية المصممة لإعطائك مزيدًا من التحكم في معالجة تخزين Mbox، مما يسمح لك بتقسيم الملفات الكبيرة إلى أجزاء يمكن إدارتها وتنفيذ إجراءات مخصصة خلال العملية:

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) نسخة من الطريقة السابقة، هذه تسمح لك أيضًا بتحديد بادئة مخصصة لأسماء ملفات Mbox المقسمة.

MboxStorageReader.setEmlCopyingEventHandler الحدث يحدث هذا الحدث قبل نسخ رسالة بريد إلكتروني إلى ملف Mbox جديد. يمكنك تخصيص الإجراءات قبل معالجة الرسائل.

MboxStorageReader.setEmlCopiedEventHandler الحدث يحدث هذا الحدث بعد نسخ رسالة بريد إلكتروني إلى ملف Mbox جديد. يمكنك تنفيذ إجراءات ما بعد المعالجة على الرسائل.

MboxStorageReader.setMboxFileCreatedEventHandler الحدث يحدث هذا الحدث عندما يتم إنشاء ملف Mbox جديد. يمكنك معالجة هذا الحدث للرد على إنشاء الملف.

MboxStorageReader.setMboxFileFilledEventHandler الحدث يحدث عندما يُملأ ملف Mbox جديد بالرسائل الإلكترونية. يمكنك الاستجابة لتعبئة الملف بالرسائل.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) يمثل مفوضًا للتعامل مع الأحداث التي تحدث بعد إنشاء ملف تخزين جديد أو معالجته.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) يمثل مفوضًا للتعامل مع الأحداث المتعلقة بنسخ عناصر Mime، عادةً ما يُستخدم في السيناريوهات التي يتم فيها نسخ كائن MailMessage من تخزين إلى آخر.

NewStorageEventArgs تمثل المعطيات المستخدمة في الأحداث التي تُثار بعد إنشاء ملف تخزين جديد أو بعد معالجته.

MimeItemCopyEventArgs تمثل معطيات الحدث المتعلقة بنسخ كائن MailMessage من تخزين إلى آخر، سواء قبل بدء النسخ أو بعد اكتماله.

يوضح عينة الشيفرة أدناه كيفية التعامل مع ملفات Mbox، ومعالجة الأحداث المرتبطة بهذه الملفات، وإجراء عمليات مثل تقسيم تخزين Mbox إلى أجزاء أصغر مع تتبع عدد الرسائل وعدد الأجزاء.

messageCount = 0;
partCount = 0;

// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);

// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("New Mbox file created: " + e.getFileName());
        partCount++;
    }
});

mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("Mbox file filled with messages: " + e.getFileName());
    }
});

mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
    public void invoke(Object sender, MimeItemCopyEventArgs e) {
        System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
        messageCount++;
    }
});

// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");

// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);