Cách Phân Tích Tệp MSG trong Python

Cách Phân Tích Tệp MSG trong Python

aspose-email-foss cho Python cung cấp một API thuần Python để đọc các tệp Outlook MSG mà không cần phụ thuộc vào Microsoft Office. Tải một tệp vào đối tượng MapiMessage để truy cập tất cả dữ liệu tin nhắn.

Hướng Dẫn Từng Bước

Bước 1: Cài đặt gói

pip install aspose-email-foss

Yêu cầu Python 3.10 trở lên.


Bước 2: Nhập lớp MapiMessage

from aspose.email_foss.msg import MapiMessage

Bước 3: Tải tệp MSG

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

Để phân tích lỏng lẻo các tệp bị hỏng, hãy truyền strict=False:

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

Bước 4: Truy cập Thuộc tính Tin nhắn

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}")

Bước 5: Liệt kê Tệp đính kèm

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

Bước 6: Kiểm tra cấu trúc CFB cấp thấp

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()

Vấn đề thường gặp và cách khắc phục

CFBError khi tải

Tệp không phải là một container CFB hợp lệ. Xác minh rằng nó là tệp Outlook MSG thực tế, không phải EML.

Thân trống nhưng phần thân HTML có nội dung

Một số tin nhắn chỉ lưu trữ nội dung dưới dạng HTML. Kiểm tra msg.body_html khi msg.body trả về None.

Cảnh báo xác thực

Truy cập msg.validation_issues để xem một bộ cảnh báo tuân thủ cho tệp đã tải.


Câu hỏi thường gặp (FAQ)

Tôi có thể đọc các tệp EML không?

Không phải trực tiếp. Thư viện xử lý định dạng MSG (CFB). Chuyển nội dung EML sang một đối tượng EmailMessage trước, sau đó sử dụng MapiMessage.from_email_message().

Việc tải có đọc toàn bộ dữ liệu đính kèm vào bộ nhớ không?

Không. Siêu dữ liệu đính kèm được đọc khi cần. Sử dụng iter_attachments_info() cho vòng lặp nhẹ.

Có an toàn với đa luồng không?

Mỗi thể hiện MapiMessage là độc lập. Các lần đọc đồng thời từ các thể hiện riêng biệt là an toàn.

 Tiếng Việt