Wprowadzenie

Programowe parsowanie wiadomości e-mail jest powszechnym wymogiem przy migracji danych, procesach archiwizacji i narzędziach zgodności. Pliki Outlook MSG używają formatu kontenera Compound File Binary (CFB) z właściwościami MAPI do kodowania metadanych wiadomości, treści ciała, odbiorców i załączników. Praca z tym formatem w Python tradycyjnie wymagała zarówno komercyjnych bibliotek, jak i niskopoziomowej manipulacji binarnej.

Pakiet aspose-email-foss zapewnia czystą w Python, licencjonowaną na licencji MIT bibliotekę do odczytu, tworzenia i konwertowania plików Outlook MSG. Udostępnia wysokopoziomowy MapiMessage API do typowych zadań oraz niżej-poziomowy dostęp MsgReader do szczegółowej inspekcji podstawowej struktury CFB. Biblioteka wymaga Python w wersji 3.10 lub nowszej i nie ma natywnych zależności.

Niezależnie od tego, czy musisz wyodrębnić temat i treść z partii zarchiwizowanych wiadomości, wyliczyć załączniki w celu indeksacji, czy skonwertować pliki MSG do standardowego formatu RFC 5322, ta biblioteka zajmuje się parsowaniem binarnym, abyś mógł skupić się na logice swojej aplikacji.


Co zawiera

Odczytywanie plików MSG przy użyciu MapiMessage

Klasa MapiMessage jest głównym punktem wejścia do parsowania plików Outlook MSG. Otwórz plik, uzyskaj dostęp do jego właściwości i zamknij go w czysty sposób za pomocą menedżera kontekstu.

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

Metoda from_file odczytuje kontener CFB, analizuje strumienie właściwości MAPI i wypełnia atrybuty typowane. Właściwości subject, body i body_html zwracają bezpośrednio odszyfrowane ciągi znaków.

Wyodrębnianie odbiorców

Każdy plik MSG przechowuje informacje o odbiorcach w dedykowanych magazynach MAPI. Właściwość MapiMessage.recipients zwraca listę obiektów MapiRecipient z typowanymi polami dla wyświetlanej nazwy, adresu e-mail oraz typu odbiorcy (TO, CC lub 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}"
        )

Praca z załącznikami

Metoda iter_attachments_info zwraca obiekty MapiAttachment, które dostarczają nazwę pliku, surowe bajty, typ MIME oraz opcjonalny Content-ID dla obrazów wstawionych inline.

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

Dostęp do właściwości MAPI

W sytuacjach, które wymagają konkretnych wartości właściwości MAPI poza wygodnymi atrybutami, użyj get_property_value z stałą PropertyId. Zapewnia to bezpośredni dostęp do dowolnej właściwości przechowywanej w pliku 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}")

Iterowanie wszystkich właściwości

Kiedy musisz przejrzeć każdą właściwość w wiadomości (w celach debugowania, audytu lub migracji), metoda iter_properties zwraca obiekty MapiProperty z pełną informacją o tagu i wartości.

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

Konwersja MSG do EML

Metoda to_email_message konwertuje przetworzone MSG na standardowy obiekt Python email.message.EmailMessage. Następnie możesz serializować wiadomość do formatu RFC 5322 (EML) przy użyciu biblioteki standardowej.

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)

Zauważ, że wyjście EML korzysta z wbudowanego modułu email w Python do serializacji. Biblioteka obsługuje konwersję MSG-do-MAPI-do-EmailMessage; biblioteka standardowa obsługuje format przewodowy RFC 5322.


Szybki start

Zainstaluj pakiet z PyPI i sparsuj swój pierwszy plik MSG w mniej niż 20 linijkach:

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

Obsługiwane formaty

FormatRozszerzenieOdczytZapis
Outlook MSG.msgTakTak
Compound File Binary.cfbTakTak
EML (poprzez konwersję).emlTak (poprzez from_email_message)Tak (poprzez to_email_message)

Obsługa EML działa poprzez konwersję: MapiMessage.from_email_message() importuje z obiektu Python email.message.EmailMessage, a to_email_message() eksportuje z powrotem. Bezpośrednie parsowanie plików EML nie jest dostępne — biblioteka standardowa obsługuje format przewodowy EML.


Open Source i licencjonowanie

Aspose.Email FOSS dla Python jest udostępniony na licencji MIT. Masz wolność używać, modyfikować i rozpowszechniać bibliotekę zarówno w projektach komercyjnych, jak i niekomercyjnych. Pełny kod źródłowy jest dostępny pod adresem GitHub.

Biblioteka jest czystą implementacją Python bez skompilowanych rozszerzeń ani zależności natywnych. Działa na każdej platformie, która obsługuje Python 3.10 lub nowszy.


Rozpoczęcie

Poznaj więcej zasobów do pracy z Aspose.Email FOSS dla Python:

Powiązane zasoby