Giới thiệu

Phân tích tin nhắn email bằng chương trình là một yêu cầu phổ biến cho việc di chuyển dữ liệu, quy trình lưu trữ và công cụ tuân thủ. Các tệp Outlook MSG sử dụng định dạng container Compound File Binary (CFB) với các thuộc tính MAPI để mã hoá siêu dữ liệu tin nhắn, nội dung thân thư, người nhận và tệp đính kèm. Làm việc với định dạng này trong Python truyền thống đã yêu cầu hoặc thư viện thương mại hoặc thao tác nhị phân cấp thấp.

Gói aspose-email-foss cung cấp một thư viện thuần Python, có giấy phép MIT, để đọc, tạo và chuyển đổi các tệp Outlook MSG. Nó cung cấp một MapiMessage API cấp cao cho các nhiệm vụ phổ biến cùng với quyền truy cập MsgReader cấp thấp để kiểm tra chi tiết cấu trúc CFB nền tảng. Thư viện yêu cầu Python 3.10 hoặc cao hơn và không có phụ thuộc gốc.

Cho dù bạn cần trích xuất dòng tiêu đề và nội dung từ một loạt tin nhắn đã lưu trữ, liệt kê các tệp đính kèm để lập chỉ mục, hoặc chuyển đổi các tệp MSG sang định dạng RFC 5322 tiêu chuẩn, thư viện này sẽ xử lý việc phân tích nhị phân để bạn có thể tập trung vào logic ứng dụng của mình.


Các thành phần bao gồm

Đọc tệp MSG với MapiMessage

Lớp MapiMessage là điểm vào chính để phân tích các tệp Outlook MSG. Mở một tệp, truy cập các thuộc tính của nó và đóng lại một cách sạch sẽ bằng trình quản lý ngữ cảnh.

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

Phương thức from_file đọc container CFB, phân tích các luồng thuộc tính MAPI, và điền các thuộc tính có kiểu. Các thuộc tính subject, bodybody_html trả về các chuỗi đã giải mã trực tiếp.

Trích xuất người nhận

Mỗi tệp MSG lưu trữ thông tin người nhận trong các kho lưu trữ MAPI riêng biệt. Thuộc tính MapiMessage.recipients trả về một danh sách các đối tượng MapiRecipient với các trường có kiểu cho tên hiển thị, địa chỉ email và loại người nhận (TO, CC hoặc 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}"
        )

Làm việc với tệp đính kèm

Phương thức iter_attachments_info trả về các đối tượng MapiAttachment cung cấp tên tệp, byte thô, loại MIME và tùy chọn Content-ID cho hình ảnh nội tuyến.

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

Truy cập các thuộc tính MAPI

Đối với các trường hợp cần giá trị thuộc tính MAPI cụ thể vượt quá các thuộc tính tiện lợi, hãy sử dụng get_property_value cùng với hằng số PropertyId. Điều này cung cấp quyền truy cập trực tiếp vào bất kỳ thuộc tính nào được lưu trong tệp 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}")

Duyệt qua tất cả các thuộc tính

Khi bạn cần kiểm tra mọi thuộc tính trong một tin nhắn (để gỡ lỗi, kiểm tra, hoặc di chuyển), phương pháp iter_properties trả về các đối tượng MapiProperty với thông tin thẻ và giá trị đầy đủ.

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

Chuyển đổi MSG sang EML

Phương pháp to_email_message chuyển đổi một MSG đã phân tích thành một đối tượng Python email.message.EmailMessage chuẩn. Từ đó bạn có thể tuần tự hoá tin nhắn sang định dạng RFC 5322 (EML) bằng thư viện chuẩn.

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)

Lưu ý rằng đầu ra EML sử dụng mô-đun email tích hợp sẵn của Python để thực hiện việc serial hóa. Thư viện này xử lý việc chuyển đổi MSG-to-MAPI-to-EmailMessage; thư viện chuẩn xử lý định dạng truyền tải RFC 5322.


Bắt đầu nhanh

Cài đặt gói từ PyPI và phân tích tệp MSG đầu tiên của bạn trong chưa tới 20 dòng:

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

Các định dạng được hỗ trợ

Định dạngPhần mở rộngĐọcGhi
Outlook MSG.msg
Tệp Hợp Nhị Phân.cfb
EML (qua chuyển đổi).emlCó (qua from_email_message)Có (qua to_email_message)

Hỗ trợ EML hoạt động thông qua chuyển đổi: MapiMessage.from_email_message() nhập từ một đối tượng Python email.message.EmailMessage, và to_email_message() xuất lại. Việc phân tích tệp EML trực tiếp không được cung cấp — thư viện chuẩn xử lý định dạng truyền tải EML.


Mã nguồn mở & Bản quyền

Aspose.Email FOSS for Python được phát hành dưới giấy phép MIT. Bạn có thể tự do sử dụng, chỉnh sửa và phân phối thư viện trong cả dự án thương mại và phi thương mại. Mã nguồn đầy đủ có sẵn trên GitHub.

Thư viện là một triển khai thuần-Python không có phần mở rộng biên dịch hay phụ thuộc gốc. Nó chạy trên bất kỳ nền tảng nào hỗ trợ Python 3.10 hoặc cao hơn.


Bắt đầu

Khám phá thêm các tài nguyên để làm việc với Aspose.Email FOSS cho Python:

  • Developer Guide — tài liệu đầy đủ với các hướng dẫn và walkthroughs API
  • Knowledge Base — các bài viết hướng dẫn và các câu hỏi thường gặp
  • API Reference — tham chiếu đầy đủ các lớp và phương thức

Tài Nguyên Liên Quan