برنامه‌نویسی با 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 بخوانید.

//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

API Aspose.Email امکان انجام اعمال زیر بر پیام‌ها را هنگام خواندن آن‌ها از فایل 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) متد - پارامتر 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) متد - هنگام خواندن پیام از ذخیره‌سازی Mbox، گزینه‌های EmlLoadOptions را مشخص می‌کند.

استخراج پیام‌ها از 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) - یک مجموعه قابل تکرار (enumerable) از نمونه‌های 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() متد و مقدار فوق را منتقل کنید 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 Event این رویداد زمانی رخ می‌دهد که یک فایل Mbox جدید با ایمیل‌ها پر شود. می‌توانید به پر شدن فایل با ایمیل‌ها واکنش نشان دهید.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) نمایانگر یک delegate برای مدیریت رویدادهایی است که پس از ایجاد یا پردازش یک فایل ذخیره‌سازی جدید رخ می‌دهند.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) نمایانگر یک delegate برای مدیریت رویدادهای مرتبط با کپی موارد 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);