- รูปแบบ Mbox คืออะไร?
- .NET API เพื่ออ่านไฟล์ Mbox
- กำลังเปิดไฟล์ 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 โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถโพสต์คำถามของคุณไปที่ ฟอรัมของเรา