ไฟล์เก็บข้อมูล Mbox

ในบทความนี้ เราจะสำรวจรูปแบบ mbox และให้ข้อมูลโค้ดเพื่อช่วยคุณในการเริ่มต้นอ่านไฟล์ mbox คุณจะได้เรียนรู้วิธีแยกวิเคราะห์ไฟล์ mbox และดูและบันทึกข้อความที่อยู่ในไฟล์

รูปแบบ Mbox คืออะไร?

รูปแบบ mbox เป็นรูปแบบไฟล์ที่ใช้กันอย่างแพร่หลายในการจัดเก็บข้อความอีเมล มีประวัติอันยาวนานและได้รับการสนับสนุนจากไคลเอนต์อีเมลยอดนิยมหลายตัว เช่น Thunderbird, Apple Mail และอื่นๆ อีกมากมาย ในรูปแบบ mbox ข้อความอีเมลหลายข้อความจะถูกจัดเก็บเป็นข้อความธรรมดาในไฟล์เดียว ทำให้สะดวกในการเก็บและส่งข้อมูลอีเมล

รูปแบบ mbox มีหลายรูปแบบ แต่ละรูปแบบมีรายละเอียดการใช้งานของตัวเอง รูปแบบ mbox ที่พบโดยทั่วไปได้แก่ mboxrd, mboxo, mboxcl, mboxcl2 รูปแบบเหล่านี้ส่วนใหญ่แตกต่างกันในวิธีจัดการกับลักษณะบางอย่าง เช่น ตัวคั่นข้อความและข้อมูลเมตา สิ่งสำคัญคือต้องตระหนักถึงความแตกต่างเหล่านี้เมื่อทำงานกับไฟล์ mbox เนื่องจากอาจส่งผลต่อความเข้ากันได้และการแยกวิเคราะห์ข้อมูลอีเมล

มาดูไคลเอนต์อีเมลบางส่วนอย่างใกล้ชิดและวิธีที่พวกเขาใช้รูปแบบ mbox:

  • ธันเดอร์เบิร์ด: ธันเดอร์เบิร์ดเป็นไคลเอนต์อีเมลโอเพ่นซอร์สยอดนิยมที่ใช้รูปแบบ mbox เพื่อจัดเก็บข้อความอีเมล มันเก็บข้อความทั้งหมดของโฟลเดอร์ไว้ในไฟล์ mbox เดียวที่มีนามสกุล “.mbox” Thunderbird สร้างไฟล์ mbox แยกกันสำหรับแต่ละโฟลเดอร์ภายในกล่องจดหมายของผู้ใช้ ช่วยให้จัดการและสำรองข้อมูลอีเมลได้ง่าย

  • Apple Mail: Apple Mail ซึ่งเป็นไคลเอนต์อีเมลเริ่มต้นในอุปกรณ์ macOS และ iOS ก็ใช้รูปแบบ mbox เช่นกัน โดยจะจัดเก็บโฟลเดอร์เมลบ็อกซ์แต่ละโฟลเดอร์เป็นไฟล์ mbox แยกกัน ทำให้ง่ายต่อการโยกย้ายหรือถ่ายโอนข้อมูลอีเมลระหว่างการติดตั้ง Apple Mail ไฟล์ mbox ของ Apple Mail มักมีนามสกุลเป็น “.mbox” หรือ “.mbox.plist”

  • Eudora: Eudora ซึ่งเป็นไคลเอนต์อีเมลยอดนิยมในอดีต ใช้รูปแบบ mbox เพื่อจัดเก็บข้อความอีเมล ใช้รูปแบบ mbox ที่ปรับเปลี่ยนเล็กน้อยซึ่งเรียกว่า “รูปแบบกล่องจดหมาย Eudora” รูปแบบกล่องจดหมาย Eudora รวมคุณลักษณะเพิ่มเติมและข้อมูลเมตาเฉพาะสำหรับ Eudora เช่น ป้ายชื่อและธงแสดงสถานะ

นี่เป็นเพียงตัวอย่างบางส่วนของไคลเอนต์อีเมลที่ใช้รูปแบบ mbox การทำความเข้าใจรูปแบบ mbox และการใช้งานในไคลเอนต์อีเมลต่างๆ เป็นสิ่งสำคัญเมื่อทำงานกับไฟล์ mbox ทางโปรแกรม เนื่องจากจะช่วยรับประกันความเข้ากันได้และการแยกวิเคราะห์ข้อมูลอีเมลที่ถูกต้อง

.NET API เพื่ออ่านไฟล์ Mbox

ในการทำงานกับไฟล์ mbox ใน C# เราจะใช้ Aspose.Email for .NET ไลบรารีที่แข็งแกร่งและเต็มไปด้วยฟีเจอร์นี้มีฟังก์ชันการทำงานที่หลากหลายสำหรับการประมวลผลอีเมล รวมถึงการอ่านไฟล์ mbox การแยกข้อความ และการจัดการข้อมูลอีเมล เป็นที่น่าสังเกตว่า Aspose.Email for .NET ให้การสนับสนุนที่ครอบคลุมสำหรับรูปแบบ mbox ต่างๆ รวมถึงรูปแบบที่กล่าวถึงข้างต้น ซึ่งช่วยให้คุณทำงานกับไฟล์ mbox จากไคลเอนต์อีเมลต่างๆ ได้อย่างราบรื่น โดยไม่คำนึงถึงรายละเอียดการใช้งาน mbox ที่เฉพาะเจาะจง เพื่อใช้ประโยชน์จากพลังของ API คุณสามารถ ดาวน์โหลด DLL ของมันหรือติดตั้งจาก NuGet โดยใช้คำสั่งต่อไปนี้:

PM> Install-Package Aspose.Email

กำลังเปิดไฟล์ Mbox

ตอนนี้เรามีความเข้าใจเกี่ยวกับรูปแบบ mbox และการใช้งานในไคลเอนต์อีเมลต่างๆ มากขึ้นแล้ว เรามาสำรวจคุณลักษณะและหลักปฏิบัติในการทำงานกับไฟล์ mbox โดยใช้ Aspose.Email กัน ในการเริ่มแยกวิเคราะห์ไฟล์ mbox เราจำเป็นต้องเปิดไฟล์นั้น ด้านล่างนี้เป็นขั้นตอนในการเปิดไฟล์ mbox:

  • อันดับแรก เราสร้างอินสแตนซ์ของ MboxLoadOptions เพื่อระบุตัวเลือกที่ต้องการสำหรับการโหลดไฟล์ mbox

  • จากนั้น เราตั้งค่า LeaveOpen เป็นเท็จเพื่อปิดไฟล์ mbox โดยอัตโนมัติหลังจากอ่าน และระบุ Encoding.UTF8 เป็นการเข้ารหัสข้อความที่ต้องการ

  • สุดท้าย เราสร้างอินสแตนซ์ของคลาส MboxStorageReader โดยเรียกเมธอดสแตติก CreateReader ส่งชื่อไฟล์ MBOX ต้นทางและอินสแตนซ์ MboxLoadOptions

ขั้นตอนจะแสดงในข้อมูลโค้ดต่อไปนี้:

var mboxLoadOptions = new MboxLoadOptions
{
    LeaveOpen = false,
    PreferredTextEncoding = Encoding.UTF8
};

var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions);

รายการข้อความ

เมื่อเราเปิดไฟล์ mbox แล้ว เราสามารถดึงข้อมูลเกี่ยวกับข้อความที่เก็บไว้ได้ ข้อมูลโค้ดต่อไปนี้แสดงสองวิธีในการแสดงรายการข้อความจากไฟล์ mbox

วิธีที่ 1: ใช้เมธอด EnumerateMessageInfo

เมธอด EnumerateMessageInfo ของคลาส MboxStorageReader ใช้เพื่อวนซ้ำข้อความและดูข้อมูลข้อความพื้นฐาน เช่น หัวเรื่อง ช่องจาก ถึง และวันที่ นอกจากนี้ยังส่งคืนตัวระบุข้อความ (รหัสรายการ) ที่สามารถใช้ในภายหลังเพื่ออ่านเนื้อหาข้อความทั้งหมด วิธีการนี้มีลักษณะดังต่อไปนี้:

  • ประสิทธิภาพ: วิธีนี้มีประสิทธิภาพมากกว่าเมื่อเทียบกับวิธีที่สอง เนื่องจากจะอ่านและดูข้อมูลข้อความพื้นฐานเท่านั้น หลีกเลี่ยงค่าใช้จ่ายในการแยกวิเคราะห์และการโหลดเนื้อหาข้อความทั้งหมดระหว่างการวนซ้ำ

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

อย่างไรก็ตาม สิ่งสำคัญคือต้องทราบว่าด้วยวิธีนี้ เนื้อหาข้อความทั้งหมดจะไม่ถูกโหลดระหว่างการวนซ้ำครั้งแรก แต่จะดึงเฉพาะรายละเอียดที่จำเป็นเท่านั้น ซึ่งช่วยให้การประมวลผลเริ่มต้นเร็วขึ้น

ข้อมูลโค้ดต่อไปนี้สาธิตกระบวนการทำซ้ำผ่านข้อความโดยใช้เมธอด EnumerateMessageInfo และการดึงข้อมูล

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var messageInfo in mbox.EnumerateMessageInfo())
    {
        Console.WriteLine(messageInfo.Subject);
        Console.WriteLine(messageInfo.From);
        Console.WriteLine(messageInfo.To);
        Console.WriteLine(messageInfo.Date);
    }
}

ด้วยวิธีนี้ เราสามารถเข้าถึงคุณสมบัติต่างๆ เช่น หัวเรื่อง จาก ถึง และวันที่ เพื่อแสดงรายละเอียดที่เกี่ยวข้อง

วิธีที่ 2: ใช้เมธอด EnumerateMessages

วิธีที่สองเกี่ยวข้องกับการใช้เมธอด EnumerateMessages เพื่อวนซ้ำโดยตรงผ่านอินสแตนซ์ MailMessage ที่มีอยู่ในไฟล์ mbox วิธีนี้จะอ่านและโหลดเนื้อหาข้อความทั้งหมดระหว่างการวนซ้ำแต่ละครั้ง ทำให้สามารถเข้าถึงข้อมูลอีเมลทั้งหมดได้ทันที นี่คือประเด็นสำคัญบางประการของแนวทางนี้:

  • ความสมบูรณ์: ซึ่งแตกต่างจากแนวทางแรก วิธีนี้ช่วยให้คุณเข้าถึงและประมวลผลเนื้อหาข้อความทั้งหมด รวมถึงเนื้อหา สิ่งที่แนบมา ส่วนหัว และส่วนอื่นๆ ให้การเข้าถึงข้อมูลอีเมลที่สมบูรณ์ในระหว่างการทำซ้ำ

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

อย่างไรก็ตาม สิ่งสำคัญคือต้องพิจารณาว่าการโหลดเนื้อหาข้อความทั้งหมดระหว่างการวนซ้ำแต่ละครั้งอาจส่งผลต่อประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับไฟล์ mbox ขนาดใหญ่หรือข้อความจำนวนมาก เวลาในการประมวลผลเพิ่มเติมที่จำเป็นในการโหลดเนื้อหาข้อความทั้งหมดอาจเป็นการแลกเปลี่ยนที่ต้องพิจารณาเมื่อเลือกระหว่างสองวิธี

ข้อมูลโค้ดต่อไปนี้สาธิตกระบวนการทำซ้ำผ่านข้อความโดยใช้เมธอด EnumerateMessages และการดึงเนื้อหาข้อความทั้งหมด

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var eml in mbox.EnumerateMessages())
    {
        eml.Save($@"{eml.Subject}.eml");
    }
}

ด้วยวิธีนี้ เราสามารถดำเนินการต่างๆ ในแต่ละข้อความได้ เช่น บันทึกแยกเป็นไฟล์ .eml ดังตัวอย่าง

ท้ายที่สุด ทางเลือกระหว่างแนวทางเหล่านี้ขึ้นอยู่กับกรณีการใช้งานและข้อกำหนดเฉพาะของคุณ หากคุณต้องการเข้าถึงข้อมูลข้อความพื้นฐานอย่างรวดเร็วและดำเนินการเพิ่มเติมกับข้อความเฉพาะ แนวทางแรกจะให้ประสิทธิภาพที่ดีกว่า ในทางกลับกัน หากคุณต้องการเข้าถึงเนื้อหาข้อความทั้งหมดในทันทีและต้องการดำเนินการกับข้อความทั้งหมดพร้อมกัน วิธีที่สองจะให้ความสะดวกโดยเสียค่าใช้จ่ายจากประสิทธิภาพที่ลดลงเล็กน้อย

สิ่งสำคัญคือต้องประเมินความต้องการเฉพาะของคุณและพิจารณาปัจจัยต่างๆ เช่น ขนาดของไฟล์ mbox จำนวนข้อความ และการดำเนินการที่คุณต้องการดำเนินการ เมื่อตัดสินใจว่าแนวทางใดเหมาะสมกับสถานการณ์ของคุณมากกว่า

อ่านข้อความ

ในส่วนก่อนหน้านี้ เราได้พูดถึงวิธีการแสดงรายการข้อความ ตอนนี้ เรามาสำรวจว่าเราจะอ่านข้อความแต่ละข้อความโดยใช้ตัวระบุสตริงได้อย่างไร ซึ่งสามารถได้มาจากวิธีแรกในการระบุ MessageInfo

เมื่อใช้เมธอด EnumerateMessageInfo เพื่อแสดงรายการข้อความ แต่ละข้อความจะเชื่อมโยงกับตัวระบุที่ไม่ซ้ำกันภายในไฟล์ mbox ไฟล์เดียว ตัวระบุนี้ ซึ่งโดยทั่วไปจะแสดงเป็นสตริง สามารถรับได้จากคุณสมบัติ EntryId ของอ็อบเจ็กต์ MboxMessageInfo

เมื่อเราได้รับตัวระบุข้อความแล้ว เราสามารถใช้เพื่อดูเนื้อหาข้อความทั้งหมดตามขั้นตอนต่อไปนี้:

  • เราสร้างอินสแตนซ์ของ EmlLoadOptions เพื่อระบุตัวเลือกที่ต้องการสำหรับการโหลดข้อความที่แยกออกมา
  • เราเปิดใช้งานการเก็บรักษารูปแบบข้อความที่ฝังไว้และไฟล์แนบ TNEF
  • ภายใน foreach loop เราเข้าถึงคุณสมบัติ EntryId ของแต่ละอ็อบเจ็กต์ MboxMessageInfo ซึ่งแสดงถึงตัวระบุเฉพาะของข้อความที่เกี่ยวข้อง
  • จากนั้นเราจะใช้ตัวระบุนี้ร่วมกับเมธอด ExtractMessage ของคลาส MboxStorageReader เพื่อดึงข้อความที่สมบูรณ์เป็นวัตถุ MailMessage
  • สุดท้าย เราสามารถดำเนินการใดๆ ที่ต้องการกับข้อความ เช่น บันทึกเป็นไฟล์ .eml แยกต่างหาก

ข้อมูลโค้ดด้านล่างสาธิตวิธีการอ่านข้อความแต่ละข้อความโดยใช้ตัวระบุสตริง:

var emlLoadOptions = new EmlLoadOptions
{
    PreserveEmbeddedMessageFormat = true,
    PreserveTnefAttachments = true
};

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var messageInfo in mbox.EnumerateMessageInfo())
    {
        var eml = mbox.ExtractMessage(messageInfo.EntryId, emlLoadOptions);
        eml.Save($@"{eml.Subject}.eml");
    }
}

ด้วยการใช้ประโยชน์จากตัวระบุข้อความที่ได้รับจากวิธีแรกในการระบุ MessageInfo เราจึงสามารถอ่านแต่ละข้อความได้อย่างมีประสิทธิภาพตามข้อกำหนดเฉพาะของเรา

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

โปรดทราบว่าตัวระบุข้อความจะไม่ซ้ำกันในไฟล์ mbox ไฟล์เดียว หากคุณจำเป็นต้องทำงานกับข้อความในไฟล์ mbox หลายไฟล์ คุณจะต้องรักษาการแมประหว่างตัวระบุและไฟล์ที่เกี่ยวข้อง

ด้วยความสามารถในการอ่านข้อความแต่ละข้อความโดยใช้ตัวระบุสตริงที่ไม่ซ้ำกัน คุณมีการควบคุมและความยืดหยุ่นในการประมวลผลไฟล์ mbox มากขึ้น และสามารถแยกและจัดการเนื้อหาอีเมลที่ต้องการได้อย่างมีประสิทธิภาพ

คุณสมบัติยูทิลิตี้

ไลบรารี Aspose.Email มีคุณลักษณะยูทิลิตี้หลายอย่างที่มีประโยชน์เมื่อทำงานกับไฟล์ mbox นี่คือตัวอย่างสองสามข้อ:

รับจำนวนรายการทั้งหมดที่จัดเก็บไว้ใน mbox

เราสามารถดูจำนวนรายการทั้งหมดที่จัดเก็บไว้ในไฟล์ mbox ได้ง่ายๆ ด้วยเมธอด GetTotalItemsCount สิ่งนี้มีประโยชน์สำหรับการติดตามขนาดของการรวบรวมอีเมล ใช้ข้อมูลโค้ดต่อไปนี้เพื่อให้บรรลุเป้าหมายนี้

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    var itemsCount = mbox.GetTotalItemsCount();
}

รับขนาดข้อมูลที่อ่านได้ในหนึ่งรอบ

ด้วยการเข้าถึงคุณสมบัติ CurrentDataSize ระหว่างการวนซ้ำ เราสามารถรับขนาดของข้อมูลที่อ่านในการวนซ้ำหนึ่งครั้ง นี่อาจเป็นข้อมูลที่มีค่าสำหรับการเพิ่มประสิทธิภาพหรือการติดตามความคืบหน้า เพื่อให้บรรลุเป้าหมายนี้ ให้ใช้ข้อมูลโค้ดต่อไปนี้:

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var messageInfo in mbox.EnumerateMessageInfo())
    {
        var messageSize = mbox.CurrentDataSize;
    }
}

บทสรุป

ในบทความนี้ เราได้สำรวจรูปแบบ mbox และแนะนำไลบรารี Aspose.Email for .NET เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการทำงานกับไฟล์ mbox ในโครงการ C# เราได้พูดถึงวิธีการเปิดไฟล์ mbox แยกวิเคราะห์และดูข้อความ และนำเสนอคุณสมบัติยูทิลิตี้บางอย่าง ด้วยความรู้นี้และข้อมูลโค้ดที่มีให้ ตอนนี้คุณพร้อมที่จะจัดการไฟล์ mbox อย่างง่ายดายในความพยายามในการเขียนโปรแกรมของคุณ คุณสามารถสำรวจคุณลักษณะอื่นๆ ของ Aspose.Email โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถโพสต์คำถามของคุณไปที่ ฟอรัมของเรา

ดูสิ่งนี้ด้วย