วิธีแยกไฟล์ MSG ด้วย Python

วิธีแยกไฟล์ MSG ด้วย Python

aspose-email-foss สำหรับ Python ให้ API แบบ pure-Python สำหรับอ่านไฟล์ Outlook MSG โดยไม่ต้องพึ่งพา Microsoft Office โหลดไฟล์เข้าสู่วัตถุ MapiMessage เพื่อเข้าถึงข้อมูลข้อความทั้งหมด.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพคเกจ

pip install aspose-email-foss

ต้องการ Python 3.10 หรือใหม่กว่า.


ขั้นตอนที่ 2: นำเข้าคลาส MapiMessage

from aspose.email_foss.msg import MapiMessage

ขั้นตอนที่ 3: โหลดไฟล์ MSG

msg = MapiMessage.from_file("message.msg")

สำหรับการพาร์สแบบยืดหยุ่นของไฟล์ที่มีรูปแบบไม่ถูกต้อง ให้ส่ง strict=False:

msg = MapiMessage.from_file("message.msg", strict=False)

ขั้นตอนที่ 4: เข้าถึงคุณสมบัติของข้อความ

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

ขั้นตอนที่ 5: แสดงไฟล์แนบ

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

ขั้นตอนที่ 6: ตรวจสอบโครงสร้าง CFB ระดับต่ำ

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

ปัญหาทั่วไปและการแก้ไข

CFBError ขณะโหลด

ไฟล์ไม่ใช่คอนเทนเนอร์ CFB ที่ถูกต้อง ตรวจสอบว่าเป็นไฟล์ Outlook MSG จริง ไม่ใช่ไฟล์ EML.

เนื้อหาของ Body ว่างเปล่า แต่ HTML body มีเนื้อหา

บางข้อความเก็บเนื้อหาไว้เฉพาะใน HTML. ตรวจสอบ msg.body_html เมื่อ msg.body คืนค่า None.

คำเตือนการตรวจสอบ

เข้าถึง msg.validation_issues เพื่อดูชุดของคำเตือนการปฏิบัติตามสำหรับไฟล์ที่โหลด.


คำถามที่พบบ่อย (FAQ)

ฉันสามารถอ่านไฟล์ EML ได้หรือไม่?

ไม่โดยตรง. ไลบรารีจัดการรูปแบบ MSG (CFB). แปลงเนื้อหา EML เป็นอ็อบเจ็กต์ EmailMessage ก่อน, แล้วใช้ MapiMessage.from_email_message().

การโหลดอ่านข้อมูลไฟล์แนบทั้งหมดเข้าสู่หน่วยความจำหรือไม่?

ไม่. เมตาดาต้าไฟล์แนบจะถูกอ่านตามความต้องการ. ใช้ iter_attachments_info() สำหรับการทำซ้ำแบบเบา.

มัน thread-safe หรือไม่?

แต่ละ MapiMessage อินสแตนซ์เป็นอิสระ การอ่านพร้อมกันจากอินสแตนซ์แยกต่างหากเป็นปลอดภัย.

 ภาษาไทย