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-fossYêu cầu Python 3.10 trở lên.
Bước 2: Nhập lớp MapiMessage
from aspose.email_foss.msg import MapiMessageBướ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.