Pemrograman dengan Thunderbird
Membaca File 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.
// 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();
Mengambil Properti Pesan
MboxMessageInfo kelas berisi properti berikut untuk mengambil informasi tentang sebuah pesan:
- DateTime Date - Mendapatkan tanggal pesan
- MailAddress From - Mendapatkan alamat pengirim
- string Subject - Mendapatkan subjek pesan
- MailAddressCollection Kepada - Mendapatkan koleksi alamat yang berisi penerima pesan
- MailAddressCollection CC - Mendapatkan koleksi alamat yang berisi penerima CC
- MailAddressCollection Bcc - Mendapatkan koleksi alamat yang berisi penerima BCC dari pesan
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}");
}
Ekstrak Pesan dari MBOX berdasarkan Pengidentifikasi
The MboxStorageReader kelas mencakup EnumerateMessageInfo() metode, yang memungkinkan Anda mengiterasi setiap pesan dalam file MBOX. Dengan menggunakan metode ini, menjadi memungkinkan mengekstrak pesan individu tanpa harus menelusuri seluruh penyimpanan berulang kali. Ini meningkatkan kinerja dan mengurangi waktu pemrosesan.
The MboxMessageInfo class menyediakan EntryId properti, yang memberikan akses ke pengidentifikasi unik untuk setiap pesan dalam file MBOX. Pengidentifikasi ini dapat disimpan dalam basis data atau digunakan sebagai referensi untuk dengan cepat menemukan dan mengekstrak pesan tertentu bila diperlukan.
The ExtractMessage(string id) metode dalam MboxStorageReader kelas memungkinkan pengembang mengekstrak pesan berdasarkan EntryId unik mereka. Dengan ExtractMessage(string id) metode, Anda dapat memanfaatkan EntryId yang disimpan untuk mengambil pesan yang bersangkutan dan melakukan operasi tambahan dengan pesan tersebut.
Contoh kode berikut menunjukkan cara mengekstrak pesan dari file MBOX menggunakan pengidentifikasi:
MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());
foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}
Mengonfigurasi Opsi Pemuaan saat Membaca Pesan dari MBOX
Fitur berikut akan memungkinkan Anda menentukan berbagai opsi terkait pemuatan dan pemrosesan pesan:
-
Properti MailStorageConverter.MboxMessageOptions - Mendapatkan atau mengatur opsi pemuatan email saat mengurai penyimpanan Mbox.
-
Metode MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) - parameter EmlLoadOptions menentukan opsi saat membaca pesan dari penyimpanan 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");
Menetapkan Pengkodean Teks yang Diutamakan saat Memuat File Mbox untuk Membaca
Opsi pengkodean tersedia untuk kelas MboxrdStorageReader. Ini menyediakan opsi tambahan untuk memuat file mbox dan memastikan bahwa pesan dengan konten yang di-encode akan dibaca dan diproses dengan benar. Potongan kode berikut menunjukkan cara mengatur pengkodean teks yang sesuai dengan kebutuhan Anda:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Mendapatkan Total Jumlah 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.
// 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());
}
Dapatkan Ukuran Pesan Saat Ini
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();
}
}
Mengonversi MBOX ke PST dengan Mempertahankan atau Menghapus Tanda Tangan
Untuk menghapus tanda tangan dari file selama proses konversi, atur MboxToPstConversionOptions.RemoveSignature properti menjadi true.
Contoh kode berikut menunjukkan cara memanfaatkan properti ini:
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 });
Menulis File MBOX
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.
// 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();
Bagi Penyimpanan MBOX/Batalkan Operasi Pembagian
Aspose.Email menyediakan metode untuk membagi penyimpanan Mbox menjadi bagian yang lebih kecil, sehingga lebih mudah menangani arsip email besar. Tergantung pada versi .NET yang Anda gunakan, metode yang tersedia dan parameternya dapat berbeda. Berikut ini adalah metode dari MboxStorageReader kelas yang digunakan untuk versi .NET Framework 4.5 dan .NET Core serta untuk versi di bawah 4.5.
Anggota untuk Versi .NET Framework 4.5 dan .NET Core:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token) - Memecah penyimpanan Mbox menjadi bagian-bagian lebih kecil berdasarkan ukuran potongan yang ditentukan.
-
Parameter:
- chunkSize: Ukuran perkiraan setiap chunk dalam byte.
- outputPath: Jalur folder tempat potongan (chunks) akan dibuat.
- token: Sebuah CancellationToken yang memungkinkan kemungkinan pembatalan operasi.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Memecah penyimpanan Mbox menjadi bagian-bagian lebih kecil dengan awalan nama file yang ditentukan untuk setiap bagian.
-
Parameter:
- chunkSize: Ukuran perkiraan setiap chunk dalam byte.
- outputPath: Jalur folder tempat potongan (chunks) akan dibuat.
- partFileNamePrefix: Awalan yang akan ditambahkan ke nama file setiap bagian.
- token: Sebuah CancellationToken yang memungkinkan kemungkinan pembatalan operasi.
Anggota untuk Versi .NET Framework Di Bawah 4.5:
-
SplitInto(long chunkSize, string outputPath) - Memecah penyimpanan Mbox menjadi bagian-bagian lebih kecil berdasarkan ukuran potongan yang ditentukan.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - Memecah penyimpanan Mbox menjadi bagian-bagian lebih kecil dengan awalan nama file yang ditentukan untuk setiap bagian.
-
Cancel() - Menginterupsi operasi pemecahan yang sedang berlangsung.
Potongan kode berikut menunjukkan cara memecah file MBOX menjadi bagian-bagian sambil membatasi proses hingga maksimum lima bagian, menggunakan mekanisme pembatalan:
.NET Framework 4.5 dan .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 Di Bawah 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();
};