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

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

เกี่ยวกับรูปแบบ Mbox

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

ไคลเอนต์อีเมลยอดนิยมที่เข้ากันได้กับรูปแบบนี้คือ:

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

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

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

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

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

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

การทำงานกับไฟล์ mbox ใน Python นั้นง่ายดายด้วยไลบรารี Aspose.Email for Python ของเรา API ที่มีประสิทธิภาพและเต็มไปด้วยฟีเจอร์นี้ซึ่งมีชุดฟีเจอร์มากมายสำหรับการประมวลผลอีเมล เช่น ความสามารถในการอ่านไฟล์ mbox ดึงข้อความ และจัดการข้อมูลอีเมล

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

> pip install Aspose.Email-for-Python-via-NET

เปิดไฟล์ Mbox

ในการเริ่มทำงานกับไฟล์ในรูปแบบ mbox เราควรเปิดไฟล์นั้นก่อน ห้องสมุด Aspose.Email จะช่วยเราได้

ในรหัสของเรา เราจะทำตามขั้นตอนที่อธิบายไว้ด้านล่าง:

  • รหัสเริ่มต้นด้วยการนำเข้าโมดูลที่จำเป็นจากไลบรารี Aspose.Email: คลาส MboxStorageReader และ MboxLoadOptions

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

  • จากนั้น เราตั้งค่า Leaveopen เป็น False ซึ่งระบุว่าควรปิดไฟล์หลังจากอ่าน และระบุ UTF8 เป็นการเข้ารหัสข้อความที่ต้องการ

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

ข้อมูลโค้ดต่อไปนี้สาธิตวิธีการเปิดไฟล์ mbox:

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

mbox_reader = MboxStorageReader.create_reader(file_name, mbox_load_options)

แสดงรายการข้อความจากไฟล์ Mbox

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

วิธีที่ 1: วิธีการ EnumerateMessageInfo

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

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

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

หากต้องการอ่าน แสดงรายการ และดูข้อความในไฟล์ mbox เราจะทำตามขั้นตอนด้านล่าง:

  • นำเข้าโมดูลที่จำเป็นจากไลบรารี Aspose.Email: คลาส MboxStorageReader และ MboxLoadOptions

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

  • กำหนดค่าคุณสมบัติของวัตถุ:

    • ตั้งค่า Leaveopen เป็น False หากคุณต้องการปิดไฟล์หลังจากอ่าน
    • ตั้งค่าการเข้ารหัสข้อความที่ต้องการเป็น ‘utf-8’ เพื่อระบุการเข้ารหัสข้อความที่ต้องการสำหรับเนื้อหาข้อความ
  • เปิดไฟล์ด้วยเมธอด MboxStorageReader.createreader() ของคลาส MboxStorageReader

  • วนซ้ำแต่ละข้อความในไฟล์โดยใช้เมธอด enumeratemessageinfo() ของวัตถุ mboxreader ที่แยกรายละเอียดเฉพาะจากแต่ละข้อความ ในตัวอย่างของเรา หัวเรื่อง ที่อยู่ ถึง และวันที่

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        print(message_info.subject)
        print(message_info.from_address)
        print(message_info.to)
        print(message_info.date)

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

วิธีที่ 2: วิธีการ EnumerateMessages

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

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

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

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for eml in mbox_reader.enumerate_messages():
        eml.save(f"{eml.subject}.eml")

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

อ่านข้อความในไฟล์ Mbox

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

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

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

  • เราสร้างอินสแตนซ์ของ EmlLoadOptions วัตถุนี้จะมีตัวเลือกต่างๆ สำหรับการโหลดไฟล์ EML
  • กำหนดค่าคุณสมบัติ:
    • ตั้งค่ารูปแบบข้อความที่ฝังไว้เป็น True หากคุณต้องการรักษารูปแบบข้อความที่ฝังไว้ภายในไฟล์ EML
    • ตั้งค่าการรักษาไฟล์แนบเป็น True หากคุณต้องการรักษาไฟล์แนบ TNEF ภายในไฟล์ EML
  • สร้างอินสแตนซ์ของ MboxLoadOptions วัตถุนี้จะมีตัวเลือกต่างๆ สำหรับการโหลดไฟล์ mbox
  • กำหนดค่าคุณสมบัติของ mboxloadoptions:
    • ตั้งค่า Leaveopen เป็น False หากคุณต้องการปิดไฟล์หลังจากอ่าน
    • ตั้งค่าการเข้ารหัสข้อความที่ต้องการเป็น ‘utf-8’ เพื่อระบุการเข้ารหัสข้อความที่ต้องการสำหรับเนื้อหาข้อความ
  • เปิดไฟล์ด้วยวิธี MboxStorageReader.createreader()
  • ภายใน foreach loop เราเข้าถึงคุณสมบัติ EntryId ของแต่ละอ็อบเจ็กต์ MboxMessageInfo ซึ่งแสดงถึงตัวระบุเฉพาะของข้อความที่เกี่ยวข้อง
  • จากนั้นเราจะใช้ตัวระบุนี้ร่วมกับเมธอด ExtractMessage ของคลาส MboxStorageReader เพื่อดึงข้อความที่สมบูรณ์เป็นออบเจกต์ MailMessage
  • สุดท้าย เราสามารถดำเนินการตามที่ต้องการกับข้อความได้ เช่น บันทึกเป็นไฟล์ .eml แยกต่างหาก

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions
from aspose.email import EmlLoadOptions

eml_load_options = EmlLoadOptions()
eml_load_options.preserve_embedded_message_format = True
eml_load_options.preserve_tnef_attachments = True

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        eml = mbox_reader.extract_message(message_info.entry_id, eml_load_options)
        eml.save(f"{eml.subject}.eml")

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

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

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

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

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

มีวิธีง่ายๆ ในการกำหนดจำนวนรายการ (ข้อความ) ทั้งหมดที่จัดเก็บไว้ในไฟล์ mbox ใช้เมธอด gettotalitemscount() เพื่อดึงจำนวนรายการ (ข้อความ) ทั้งหมดที่มีอยู่ในไฟล์

รหัสต่อไปนี้ได้รับจำนวนรายการทั้งหมด (ข้อความ) ที่มีอยู่ในไฟล์

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
    items_count = mbox_reader.get_total_items_count()

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

ในการรับขนาดของข้อมูลที่อ่านระหว่างการวนซ้ำครั้งเดียว คุณสามารถเข้าถึงคุณสมบัติขนาดข้อมูลปัจจุบันของออบเจ็กต์ mboxreader เพื่อดึงขนาดของข้อมูล (ข้อความ) ที่กำลังอ่านในการวนซ้ำปัจจุบัน

รหัสต่อไปนี้วนซ้ำผ่านแต่ละข้อความในไฟล์ ในระหว่างการวนซ้ำแต่ละครั้ง ขนาดของข้อความที่อ่านในปัจจุบันจะได้รับ

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        message_size = mbox_reader.current_data_size

บทสรุป

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

คุณสามารถสำรวจคุณลักษณะอื่นๆ ของ Aspose.Email โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถโพสต์คำถามของคุณไปที่ ฟอรัมของเรา

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