Wprowadzenie

Aspose.Email FOSS for Python wykracza poza podstawowe tworzenie wiadomości. Biblioteka udostępnia pełną głębokość modelu właściwości MAPI, umożliwiając odczyt, zapis i zapytania dotyczące poszczególnych właściwości według identyfikatora i typu. Obsługuje odbiorców, załączniki i osadzone wiadomości jako obiekty pierwszej klasy oraz zapewnia dwukierunkową konwersję między binarnym formatem MSG a standardowym email.message.EmailMessage Pythona.

Na poziomie kontenera czytnik i zapisujący CFB dają deterministyczną kontrolę nad dokumentami Compound File Binary. Możesz przeglądać hierarchie magazynów, wyodrębniać surowe dane strumieni, budować nowe kontenery od podstaw i serializować je z powrotem do bajtów. Zarówno CFBError, jak i MsgError zapewniają strukturalną obsługę wyjątków dla nieprawidłowego wejścia.

Ten post przechodzi przez każdą funkcję, prezentując zweryfikowane przykłady kodu pobrane bezpośrednio z własnego zestawu testów i skryptów przykładowych biblioteki.


Co jest w zestawie

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

Każdy plik MSG jest zbudowany na właściwościach MAPI. MapiMessage udostępnia set_property() i get_property() do pracy z właściwościami za pomocą ich wartości wyliczeniowej PropertyId. Użyj iter_properties(), aby wyliczyć wszystkie właściwości w wiadomości, lub get_property_value() do bezpośredniego pobierania wartości z opcjonalnym dekodowaniem typu.

from aspose.email_foss import msg

message = msg.MapiMessage.create("Status report", "Weekly update attached.")

message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "build.agent@example.com")
message.set_property(msg.PropertyId.DISPLAY_TO, "Alice Example; Bob Example")
message.set_property(msg.PropertyId.DISPLAY_CC, "Carol Example")
message.set_property(msg.PropertyId.DISPLAY_BCC, "Ops Archive")
message.set_property(
    msg.PropertyId.TRANSPORT_MESSAGE_HEADERS,
    "X-Environment: production\nX-Workflow: weekly-report\n",
)
message.save("report.msg")

Aby odczytać właściwości z istniejącego pliku:

from aspose.email_foss import msg

with msg.MapiMessage.from_file("report.msg") as loaded:
    print(f"Subject: {loaded.subject}")
    print(f"Body: {loaded.body}")

    for prop in loaded.iter_properties():
        print(f"tag=0x{prop.property_tag:08X}")

Odbiorcy i załączniki

Dodaj odbiorców przy użyciu add_recipient(), określając nazwę wyświetlaną i typ odbiorcy (Do, DW lub UDW). Dołącz pliki przy użyciu add_attachment(), używając surowych bajtów i typu MIME. Dla zagnieżdżonych wiadomości, add_embedded_message_attachment() osadza kompletny MapiMessage jako obiekt podrzędny w obrębie rodzica.

from aspose.email_foss import msg

message = msg.MapiMessage.create("Team update", "See attached notes.")

message.add_recipient("alice@example.com", display_name="Alice Example")
message.add_recipient(
    "carol@example.com",
    display_name="Carol Example",
    recipient_type=msg.RECIPIENT_TYPE_CC,
)
message.add_recipient(
    "archive@example.com",
    display_name="Ops Archive",
    recipient_type=msg.RECIPIENT_TYPE_BCC,
)

message.add_attachment("notes.txt", b"Meeting notes content\n", mime_type="text/plain")
message.add_attachment("data.bin", b"\x00\x01\x02\x03", mime_type="application/octet-stream")
message.save("team-update.msg")

Aby sprawdzić załączniki w istniejącej wiadomości:

from aspose.email_foss import msg

with msg.MapiMessage.from_file("team-update.msg") as loaded:
    for att in loaded.iter_attachments_info():
        print(f"name={att.filename} mime={att.mime_type} size={len(att.data)}")
        print(f"  embedded={att.is_embedded_message} storage={att.storage_name}")

Konwersja MSG na EmailMessage

Biblioteka konwertuje w obu kierunkach między MSG a email.message.EmailMessage języka Python. Użyj to_email_message(), aby utworzyć zgodny ze standardami obiekt MIME, lub from_email_message(), aby zaimportować istniejący EmailMessage do formatu MSG. Metody wygodne to_email_bytes() i to_email_string() serializują bezpośrednio do bajtów lub tekstu.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("example.msg") as loaded:
    email_msg = loaded.to_email_message()

    print(f"content_type: {email_msg.get_content_type()}")
    print(f"is_multipart: {email_msg.is_multipart()}")
    print(f"headers: {len(email_msg)}")

    for key, value in email_msg.items():
        print(f"  {key}: {value}")

    body_part = email_msg.get_body(preferencelist=("plain", "html"))
    if body_part is not None:
        print(f"body: {body_part.get_content()[:200]}")

Pełny cykl kontenera CFB

Twórz i serializuj kontenery Compound File Binary niezależnie od warstwy MSG. CFBDocument.from_file() ładuje istniejący kontener do mutowalnego modelu dokumentu z węzłami CFBStorage i CFBStream. CFBWriter.write_file() serializuje dokument z powrotem na dysk w sposób deterministyczny.

from aspose.email_foss.cfb import CFBDocument, CFBReader, CFBWriter

reader = CFBReader.from_file("container.cfb")
document = CFBDocument.from_reader(reader)
reader.close()

output = CFBWriter.to_bytes(document)
print(f"Serialized {len(output)} bytes")

Obsługa błędów

Biblioteka zgłasza CFBError dla nieprawidłowej zawartości CFB i MsgError dla nieprawidłowej struktury MSG. MapiMessage również udostępnia właściwość validation_issues, która zwraca krotkę ciągów ostrzeżeń bez podnoszenia wyjątku, pozwalając Ci zdecydować, jak ściśle obsługiwać niezgodne pliki.

from aspose.email_foss.cfb import CFBReader, CFBError
from aspose.email_foss.msg import MsgReader, MsgError

try:
    reader = CFBReader.from_file("corrupted.cfb")
except CFBError as e:
    print(f"CFB parse error: {e}")

try:
    reader = MsgReader.from_file("malformed.msg")
except MsgError as e:
    print(f"MSG parse error: {e}")

Szybki start

pip install aspose-email-foss>=26.3

Wczytaj istniejący plik MSG, odczytaj jego metadane i wyświetl załączniki:

from aspose.email_foss import msg

with msg.MapiMessage.from_file("inbox-message.msg") as message:
    print(f"Subject: {message.subject}")
    print(f"Body preview: {message.body[:200] if message.body else '(empty)'}")

    for att in message.iter_attachments_info():
        print(f"Attachment: {att.filename} ({att.mime_type}, {len(att.data)} bytes)")

    issues = message.validation_issues
    if issues:
        print(f"Warnings: {issues}")

Obsługiwane formaty

FormatImportEksport
MSGTakTak
CFBTakTak

Open Source i licencjonowanie

Aspose.Email FOSS for Python jest wydany na licencji MIT License. Możesz go używać w projektach osobistych, wewnętrznych i komercyjnych bez ograniczeń. Kod źródłowy jest dostępny na GitHub.


Rozpoczęcie