Pemrograman dengan Thunderbird
Baca Pesan dari MBOX
Mozilla Thunderbird adalah klien email sumber terbuka, lintas platform, yang dikembangkan oleh Mozilla Foundation. Ia menyimpan email dalam struktur file miliknya sendiri, mengelola indeks pesan dan subfolder melalui format file proprietari. Aspose.Email dapat bekerja dengan struktur penyimpanan mail Thunderbird. The MboxrdStorageReader kelas memungkinkan pengembang membaca pesan dari file penyimpanan email Mozilla Thunderbird. Artikel ini menunjukkan cara membaca pesan dari penyimpanan email Thunderbird:
- Buka file penyimpanan Thunderbird dalam FileStream.
- Buat sebuah instansi dari MboxrdStorageReader kelas dan berikan aliran di atas ke konstruktor.
- Panggil ReadNextMessage() untuk mendapatkan pesan pertama.
- Gunakan yang sama ReadNextMessage() dalam loop while untuk membaca semua pesan.
- Tutup semua aliran.
Potongan kode berikut menunjukkan cara membaca semua pesan dari penyimpanan email 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]);
}
}
}
Konfigurasikan Opsi Muat saat Membaca Pesan dari MBOX
API Aspose.Email memungkinkan manipulasi berikut dengan pesan saat membacanya dari file MBOX:
Konversi Pesan dari MBOX ke PST dengan Menjaga Lampiran 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() properti - Mendapatkan atau mengatur opsi pemuatan email saat parsing penyimpanan Mbox.
Baca Pesan dengan Menjaga Lampiran 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) metode - Parameter EmlLoadOptions menentukan opsi saat membaca pesan dari penyimpanan Mbox.
Enumerasi Pesan dengan Menjaga Lampiran 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) metode - Menentukan EmlLoadOptions saat membaca pesan dari penyimpanan Mbox.
Ekstrak Pesan dari MBOX berdasarkan Pengidentifikasi
Terkadang diperlukan untuk mengekstrak pesan terpilih berdasarkan pengidentifikasi. Misalnya, aplikasi Anda menyimpan pengidentifikasi dalam basis data dan mengekstrak pesan bila diminta. Ini merupakan cara efisien untuk menghindari penelusuran seluruh penyimpanan setiap kali mencari pesan tertentu untuk diekstrak. Untuk mengimplementasikan fitur ini pada file MBOX, Aspose.Email menyediakan metode dan kelas berikut:
- MboxMessageInfo kelas dengan EntryId properti - Mengambil pengidentifikasi entri.
- enumerateMessageInfo() metode dari MboxStorageReader kelas - Menyajikan enumerator, yang mendukung iterasi pesan dalam penyimpanan.
- extractMessage(String id) metode dari MboxStorageReader kelas - Mengambil pesan dari MBOX.
Contoh kode di bawah ini menunjukkan cara mengekstrak pesan dari MBOX berdasarkan pengidentifikasi:
MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());
for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}
Catatan: ID pesan bersifat unik dalam file penyimpanan. ID dibuat oleh Aspose.Email dan tidak dapat digunakan dalam perpustakaan atau aplikasi pemrosesan MBOX pihak ketiga lainnya.
Filter dan Cari Email dalam File MBOX
Aspose.Email for Java menyediakan kemampuan untuk menyaring atau mencari pesan dalam file MBOX menggunakan kueri. Ini memungkinkan pengambilan hanya pesan yang memenuhi kriteria tertentu. Dengan cara ini, Anda dapat meningkatkan kinerja dan kegunaan aplikasi saat bekerja dengan file MBOX yang besar.
Contoh kode di bawah ini menunjukkan cara menerapkan fitur ini dengan merealisasikan metode-metode berikut:
-
enumerateMessages(MailQuery query)- mengembalikan koleksi dapat-diiterasi dari instance MailMessage yang cocok dengan kueri yang ditentukan. -
enumerateMessageInfo(MailQuery query)- mengembalikan koleksi dapat-diiterasi dari instance MboxMessageInfo yang cocok dengan kueri yang ditentukan.
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());
}
Pengambilan Pesan Terpaginasikan dari File MBOX
Aspose.Email for Java mendukung pengambilan pesan secara terpaginasikan dari file MBOX. Fitur ini memungkinkan pemrosesan file MBOX besar secara efisien dengan mengambil pesan dalam batch yang lebih kecil, mengurangi penggunaan memori, dan meningkatkan kinerja.
Contoh kode di bawah ini menunjukkan cara menerapkan fitur ini dengan merealisasikan metode-metode berikut:
-
enumerateMessages(int startIndex, int count)- mengambil sejumlah instance MailMessage yang ditentukan mulai dari indeks tertentu. -
enumerateMessageInfo(int startIndex, int count)- mengambil sejumlah instance MboxMessageInfo yang ditentukan mulai dari indeks tertentu.
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());
}
Menulis Pesan
The MboxrdStorageWriter kelas menyediakan fasilitas untuk menulis pesan baru ke file penyimpanan email Thunderbird. Untuk menulis pesan:
- Buka file penyimpanan Thunderbird dalam FileStream.
- Buat sebuah instansi dari MboxrdStorageWriter kelas dan berikan aliran di atas ke konstruktor.
- Siapkan pesan baru menggunakan MailMessage kelas.
- Panggil WriteMessage() metode dan berikan yang di atas MailMessage instansi untuk menambahkan pesan ke penyimpanan Thunderbird.
- Tutup semua aliran.
Potongan kode berikut menunjukkan cara menulis pesan ke penyimpanan email 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]);
}
}
Mendapatkan Jumlah Total Pesan dari File MBox
The MboxrdStorageReader kelas menyediakan kemampuan untuk membaca jumlah item yang tersedia dalam file MBox. Ini dapat digunakan untuk mengembangkan aplikasi yang menampilkan kemajuan aktivitas saat memproses file tersebut.
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}
Dapatkan Ukuran Pesan Saat Ini
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);
}
}
Atur Enkoding Teks yang Diinginkan saat Memuat File Mbox
The setPreferredTextEncoding(Charset value) metode dari MboxLoadOptions kelas mendapatkan atau mengatur enkoding yang diinginkan untuk pesan. Buat pembaca untuk file Mbox dengan opsi pemuatan yang ditentukan dan pesan Anda dengan konten yang dienkode akan dibaca dan diproses dengan benar. Contoh kode berikut menunjukkan cara menerapkan fitur ini ke dalam proyek:
MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();
Pisahkan Penyimpanan Mbox menjadi Bagian Lebih Kecil
Aspose.Email menyediakan komponen-komponen berikut yang dirancang untuk memberikan kontrol lebih besar atas pemrosesan penyimpanan Mbox, memungkinkan Anda memecah file besar menjadi bagian yang dapat dikelola dan menerapkan tindakan khusus selama proses:
- MboxStorageReader.SplitInto(long chunkSize, String outputPath) metode - Memungkinkan Anda memecah penyimpanan Mbox menjadi bagian-bagian lebih kecil, sehingga lebih mudah mengelola dan memproses file Mbox yang besar.
MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Variasi dari metode sebelumnya, yang ini juga memungkinkan Anda menentukan prefiks khusus untuk nama file Mbox yang dipisah.
MboxStorageReader.setEmlCopyingEventHandler Event Peristiwa ini terjadi sebelum email disalin ke file Mbox baru. Anda dapat menyesuaikan tindakan sebelum email diproses.
MboxStorageReader.setEmlCopiedEventHandler Event Peristiwa ini terjadi setelah email disalin ke file Mbox baru. Anda dapat melakukan tindakan pasca-pemrosesan pada email.
MboxStorageReader.setMboxFileCreatedEventHandler Event Peristiwa ini terjadi ketika file Mbox baru dibuat. Anda dapat menangani peristiwa ini untuk merespons pembuatan file.
MboxStorageReader.setMboxFileFilledEventHandler Event Peristiwa ini terjadi ketika file Mbox baru diisi dengan email. Anda dapat menanggapi file yang diisi dengan email.
NewStorageEventHandler(Object sender, NewStorageEventArgs e) Mewakili delegasi untuk menangani peristiwa yang terjadi setelah file penyimpanan baru dibuat atau diproses.
MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) Mewakili delegasi untuk menangani peristiwa terkait penyalinan item Mime, biasanya digunakan dalam skenario di mana objek MailMessage disalin dari satu penyimpanan ke penyimpanan lain.
NewStorageEventArgs Mewakili argumen yang digunakan dalam peristiwa yang dipicu setelah file penyimpanan baru dibuat atau setelah diproses.
MimeItemCopyEventArgs Mewakili argumen peristiwa terkait penyalinan objek MailMessage dari satu penyimpanan ke penyimpanan lain, baik sebelum penyalinan dimulai maupun setelah selesai.
Contoh kode di bawah ini menunjukkan cara berinteraksi dengan file Mbox, menangani peristiwa terkait file tersebut, dan melakukan operasi seperti membagi penyimpanan Mbox menjadi bagian-bagian lebih kecil sambil melacak jumlah pesan dan jumlah bagian:
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);