การอ่านไฟล์ MBOX

ความสามารถในการอ่านของ Aspose.Email

Mozilla Thunderbird เป็นไคลเอนต์อีเมลแบบโอเพนซอร์สที่ทำงานข้ามแพลตฟอร์ม พัฒนาโดย Mozilla Foundation มันจัดเก็บอีเมลในโครงสร้างไฟล์ของตัวเอง โดยจัดการดัชนีข้อความและโฟลเดอร์ย่อยผ่านรูปแบบไฟล์ที่เป็นของมันเอง Thunderbird จะสร้างไฟล์ .mbox หนึ่งไฟล์สำหรับแต่ละโฟลเดอร์อีเมล (เช่น Inbox, Sent, Trash) และเก็บไฟล์เหล่านี้ไว้ในไดเรกทอรีโปรไฟล์ของผู้ใช้ แต่ละไฟล์จะบรรจุข้อความทั้งหมดของโฟลเดอร์นั้นในรูปแบบต่อเนื่อง

Aspose.Email สำหรับ .NET มี API สำหรับอ่านข้อความจากไฟล์ .mbox ของ Thunderbird โดยใช้ MboxrdStorageReader คลาสที่ช่วยให้ผู้พัฒนาสามารถ:

  • เปิดและอ่านข้อความอย่างต่อเนื่องทีละหนึ่ง
  • ดึงเมทาดาต้าเช่น หัวเรื่อง, จาก, ถึง, วันที่ ฯลฯ โดยไม่ต้องโหลดเนื้อหาเต็ม
  • แยกข้อความแต่ละรายการโดยใช้ตัวระบุที่ไม่ซ้ำกัน (EntryId)
  • รักษาการเข้ารหัส, ไฟล์แนบ TNEF, และรูปแบบ
  • อ่านไฟล์แบบอะซิงโครนัสเพื่อประสิทธิภาพที่ดีกว่าในคลังขนาดใหญ่

อ่านไฟล์ MBOX แบบซิงโครนัส

อ่านข้อความจากไฟล์ที่เก็บเมลของ Mozilla Thunderbird บทความนี้แสดงวิธีอ่านข้อความจากที่เก็บอีเมลของ Thunderbird:

  1. เปิดไฟล์ที่เก็บของ Thunderbird ใน FileStream.
  2. สร้างอินสแตนซ์ของ MboxrdStorageReader คลาสและส่งสตรีมที่กล่าวถึงข้างต้นไปยังคอนสตรัคเตอร์.
  3. เรียก ReadNextMessage() เพื่อรับข้อความแรก.
  4. ใช้แบบเดียวกัน ReadNextMessage() ในลูป while เพื่ออ่านข้อความทั้งหมด.
  5. ปิดสตรีมทั้งหมด.

โค้ดตัวอย่างต่อไปนี้แสดงวิธีอ่านข้อความทั้งหมดจากที่เก็บเมลของ 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();

อ่านไฟล์ MBOX แบบอะซิงโครนัส

เพื่อเพิ่มประสิทธิภาพและความตอบสนองเมื่อประมวลผลไฟล์ MBOX ขนาดใหญ่ Aspose.Email สำหรับ .NET ให้การอ่าน MBOX แบบอะซิงโครนัสผ่าน CreateReaderAsync เมธอดนี้ คุณลักษณะนี้มีประโยชน์อย่างยิ่งในแอปพลิเคชันที่จัดการคลังอีเมลขนาดใหญ่หรือทำงาน I/O ในเธรดเบื้องหลังหรือเว็บเซอร์วิส ตัวอย่างโค้ดต่อไปนี้แสดงวิธีอ่านข้อความอีเมลจากไฟล์ MBOX แบบอะซิงโครนัสโดยใช้ตัวอ่านที่จัดเก็บของ Aspose.Email:

string mboxFilePath = "emails.mbox";

    // Create a reader for the MBOX file asynchronously
    using (var reader = await MboxrdStorageReader.CreateReaderAsync(mboxFilePath, CancellationToken.None))
    {
    Console.WriteLine("MBOX reader initialized.");

    // Read messages from the MBOX file
        while (reader.ReadNextMessage() is var message && message != null)
        {
            Console.WriteLine($"Subject: {message.Subject}");
        }
    }

อ่านข้อความอีเมลเป็นชุดพร้อมการรองรับการแบ่งหน้า

รับการเข้าถึงแบบแบ่งหน้าไปยังข้อความที่เก็บในไฟล์กล่องจดหมาย คุณลักษณะนี้ทำให้ผู้พัฒนาประมวลผลคลังอีเมลขนาดใหญ่ได้อย่างมีประสิทธิภาพมากขึ้นโดยดึงข้อความเป็นส่วนย่อย - ปรับปรุงประสิทธิภาพและลดการใช้หน่วยความจำ ใช้วิธีต่อไปนี้ของ MboxStorageReader คลาส:

  • EnumerateMessages(int startIndex, int count) - ส่งคืนคอลเลกชันที่วนซ้ำได้ของอินสแตนซ์ MailMessage เริ่มจากดัชนีที่ระบุและจำกัดตามจำนวนที่ให้

  • EnumerateMessageInfo(int startIndex, int count) - ส่งคืนคอลเลกชันที่วนซ้ำได้ของวัตถุ MboxMessageInfo ที่มีเมตาดาต้าเท่านั้น พร้อมการแบ่งหน้าโดยดัชนีและจำนวน

ตัวอย่างโค้ดด้านล่างแสดงวิธีอ่านช่วงข้อความที่กำหนดจากคลังเมลโดยกำหนดดัชนีเริ่มต้นและขนาดชุด ในตัวอย่าง วิธีการนี้ดึงข้อความ 10 ฉบับเริ่มจากดัชนี 0.

using Aspose.Email.Storage.Mbox;
using Aspose.Email;

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

foreach (var message in reader.EnumerateMessages(startIndex, count))
{
    Console.WriteLine("Subject: " + message.Subject);
}

ตั้งค่าการเข้ารหัสข้อความที่ต้องการเมื่อโหลดไฟล์ 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();
    }
}