บทนำ

การแยกวิเคราะห์ข้อความอีเมลโดยโปรแกรมเป็นความต้องการทั่วไปสำหรับการย้ายข้อมูล, กระบวนการจัดเก็บ, และเครื่องมือการปฏิบัติตามกฎระเบียบ. ไฟล์ Outlook MSG ใช้รูปแบบคอนเทนเนอร์ Compound File Binary (CFB) พร้อมคุณสมบัติ MAPI เพื่อเข้ารหัสเมตาดาต้าของข้อความ, เนื้อหาตัวข้อความ, ผู้รับ, และไฟล์แนบ. การทำงานกับรูปแบบนี้ใน Python โดยทั่วไปจำเป็นต้องใช้ไลบรารีเชิงพาณิชย์หรือการจัดการไบนารีระดับต่ำ.

แพคเกจ aspose-email-foss มอบไลบรารีแบบ pure-Python ใบอนุญาต MIT สำหรับการอ่าน, สร้าง, และแปลงไฟล์ Outlook MSG. ไลบรารีนี้เปิดเผย MapiMessage API ระดับสูงสำหรับงานทั่วไปพร้อมกับการเข้าถึง MsgReader ระดับล่างสำหรับการตรวจสอบรายละเอียดของโครงสร้าง CFB ที่อยู่ด้านล่าง. ไลบรารีต้องการ Python 3.10 หรือใหม่กว่าและไม่มีการพึ่งพาเนทีฟ.

ไม่ว่าคุณจะต้องการสกัดบรรทัดหัวเรื่องและเนื้อหาจากชุดข้อความที่จัดเก็บ, นับไฟล์แนบเพื่อทำดัชนี, หรือแปลงไฟล์ MSG ไปเป็นรูปแบบ RFC 5322 มาตรฐาน, ไลบรารีนี้จะจัดการการแยกวิเคราะห์ไบนารีเพื่อให้คุณมุ่งเน้นที่ตรรกะของแอปพลิเคชันของคุณ.


สิ่งที่รวมอยู่

การอ่านไฟล์ MSG ด้วย MapiMessage

คลาส MapiMessage เป็นจุดเข้าหลักสำหรับการแยกวิเคราะห์ไฟล์ Outlook MSG. เปิดไฟล์, เข้าถึงคุณสมบัติของมัน, และปิดอย่างสะอาดด้วยตัวจัดการบริบท.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("meeting-invite.msg") as message:
    print(f"Subject: {message.subject}")
    print(f"Body: {message.body[:200]}")
    print(f"HTML body available: {message.body_html is not None}")

วิธี from_file อ่านคอนเทนเนอร์ CFB, แยกวิเคราะห์สตรีมคุณสมบัติ MAPI, และเติมค่าแอตทริบิวต์ที่มีชนิดข้อมูล. คุณสมบัติ subject, body, และ body_html คืนสตริงที่ถอดรหัสโดยตรง.

การสกัดผู้รับ

ไฟล์ MSG ทุกไฟล์จะเก็บข้อมูลผู้รับไว้ในที่เก็บ MAPI เฉพาะ. คุณสมบัติ MapiMessage.recipients คืนรายการของอ็อบเจกต์ MapiRecipient ที่มีฟิลด์แบบกำหนดชนิดสำหรับชื่อที่แสดง, ที่อยู่อีเมล, และประเภทผู้รับ (TO, CC, หรือ BCC).

from aspose.email_foss import msg

with msg.MapiMessage.from_file("team-update.msg") as message:
    for recipient in message.recipients:
        print(
            f"{recipient.display_name} <{recipient.email_address}> "
            f"type={recipient.recipient_type}"
        )

ทำงานกับไฟล์แนบ

วิธี iter_attachments_info ให้ผลลัพธ์เป็นอ็อบเจกต์ MapiAttachment ที่ให้ชื่อไฟล์, ไบต์ดิบ, ประเภท MIME, และ Content-ID ทางเลือกสำหรับภาพแบบอินไลน์.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("report.msg") as message:
    for att in message.iter_attachments_info():
        print(f"  {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
        if att.content_id:
            print(f"    inline content-id: {att.content_id}")

การเข้าถึงคุณสมบัติ MAPI

สำหรับสถานการณ์ที่ต้องการค่าคุณสมบัติ MAPI เฉพาะที่เกินกว่าคุณลักษณะสะดวก, ให้ใช้ get_property_value พร้อมค่าคงที่ PropertyId. วิธีนี้ให้การเข้าถึงโดยตรงกับคุณสมบัติใดก็ได้ที่เก็บไว้ในไฟล์ MSG.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("notification.msg") as message:
    sender = message.get_property_value(msg.PropertyId.SENDER_NAME)
    email = message.get_property_value(msg.PropertyId.SENDER_EMAIL_ADDRESS)
    delivery = message.get_property_value(msg.PropertyId.MESSAGE_DELIVERY_TIME)
    print(f"From: {sender} <{email}>")
    print(f"Delivered: {delivery}")

การวนซ้ำคุณสมบัติทั้งหมด

เมื่อคุณต้องการตรวจสอบคุณสมบัติทุกอย่างในข้อความ (เพื่อการดีบัก, การตรวจสอบ, หรือการย้ายข้อมูล) วิธี iter_properties จะให้วัตถุ MapiProperty พร้อมข้อมูลแท็กและค่าที่ครบถ้วน.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("sample.msg") as message:
    for prop in message.iter_properties():
        print(
            f"tag=0x{prop.property_tag:08X} "
            f"type=0x{prop.property_type:04X} "
            f"value={prop.value!r}"
        )

แปลง MSG เป็น EML

วิธี to_email_message จะแปลง MSG ที่แยกวิเคราะห์แล้วเป็นวัตถุ Python email.message.EmailMessage มาตรฐาน จากนั้นคุณสามารถทำซีเรียลไลซ์ข้อความเป็นรูปแบบ RFC 5322 (EML) ด้วยไลบรารีมาตรฐาน.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("archive.msg") as message:
    email_message = message.to_email_message()
    eml_bytes = email_message.as_bytes()
    with open("archive.eml", "wb") as f:
        f.write(eml_bytes)

โปรดทราบว่าการส่งออก EML ใช้โมดูล email ที่รวมมาใน Python สำหรับการซีเรียลไลซ์ ไลบรารีจะจัดการการแปลงจาก MSG ไปยัง MAPI ไปยัง EmailMessage; ไลบรารีมาตรฐานจะจัดการรูปแบบสาย RFC 5322.


เริ่มต้นอย่างรวดเร็ว

ติดตั้งแพ็กเกจจาก PyPI และแยกวิเคราะห์ไฟล์ MSG แรกของคุณในน้อยกว่า 20 บรรทัด:

# Install: pip install aspose-email-foss>=26.3
from aspose.email_foss import msg

# Create a new message
message = msg.MapiMessage.create(
    "Project status update",
    "Hello team,\n\nPlease review the attached report.\n\nRegards",
)
message.add_recipient("alice@example.com", display_name="Alice")
message.add_attachment("notes.txt", b"meeting notes\n", mime_type="text/plain")
message.save("status-update.msg")

# Read it back and extract data
with msg.MapiMessage.from_file("status-update.msg") as loaded:
    print(f"Subject: {loaded.subject}")
    print(f"Recipients: {len(loaded.recipients)}")
    for att in loaded.iter_attachments_info():
        print(f"Attachment: {att.filename} ({len(att.data)} bytes)")

รูปแบบที่รองรับ

รูปแบบส่วนขยายอ่านเขียน
Outlook MSG.msgใช่ใช่
Compound File Binary.cfbใช่ใช่
EML (ผ่านการแปลง).emlใช่ (via from_email_message)ใช่ (via to_email_message)

การสนับสนุน EML ทำงานผ่านการแปลง: MapiMessage.from_email_message() นำเข้าจากวัตถุ Python email.message.EmailMessage และ to_email_message() ส่งออกกลับ การแยกวิเคราะห์ไฟล์ EML โดยตรงไม่ได้ถูกจัดหา — ไลบรารีมาตรฐานจะจัดการรูปแบบสาย EML.


ซอร์สเปิด & การให้สิทธิ์

Aspose.Email FOSS สำหรับ Python ได้รับการเผยแพร่ภายใต้สัญญาอนุญาต MIT. คุณสามารถใช้, แก้ไข, และแจกจ่ายไลบรารีได้ทั้งในโครงการเชิงพาณิชย์และไม่เชิงพาณิชย์. โค้ดต้นฉบับเต็มพร้อมให้เข้าถึงที่ GitHub.

ไลบรารีเป็นการนำไปใช้แบบ pure-Python โดยไม่มีส่วนขยายที่คอมไพล์หรือการพึ่งพาเนทีฟ. มันทำงานบนแพลตฟอร์มใด ๆ ที่รองรับ Python 3.10 หรือใหม่กว่า.


เริ่มต้นใช้งาน

สำรวจแหล่งข้อมูลเพิ่มเติมสำหรับการทำงานกับ Aspose.Email FOSS สำหรับ Python:

  • Developer Guide — เอกสารเต็มรูปแบบพร้อมบทเรียนและการสาธิต API
  • Knowledge Base — บทความวิธีทำและคำถามที่พบบ่อย
  • API Reference — อ้างอิงคลาสและเมธอดอย่างครบถ้วน

แหล่งข้อมูลที่เกี่ยวข้อง