การเขียนโปรแกรมด้วย Thunderbird
การอ่านไฟล์ MBOX
Mozilla Thunderbird เป็นไคลเอนต์อีเมลแบบโอเพ่นซอร์สที่ทำงานข้ามแพลตฟอร์ม พัฒนาโดย Mozilla Foundation มันเก็บอีเมลในโครงสร้างไฟล์ของตนเอง จัดการดัชนีข้อความและโฟลเดอร์ย่อยผ่านรูปแบบไฟล์เฉพาะกรรมสิทธิ์ 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() เมธอดและส่งค่าที่กล่าวถึงข้างต้น 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();
};