Úvod

Aspose.Email FOSS for Python goes beyond basic message creation. The library exposes the full depth of the MAPI property model, letting you read, write, and query individual properties by ID and type. It handles recipients, attachments, and embedded messages as first-class objects, and provides bidirectional conversion between the MSG binary format and Python’s standard email.message.EmailMessage.

Na úrovni kontejneru vám čtečka a zapisovač CFB poskytují deterministickou kontrolu nad dokumenty Compound File Binary. Můžete procházet hierarchie úložišť, extrahovat surová data proudu, vytvářet nové kontejnery od nuly a serializovat je zpět do bajtů. Oba CFBError a MsgError poskytují strukturované zpracování výjimek pro poškozený vstup.

Tento příspěvek prochází každou funkci s ověřenými ukázkami kódu čerpajícími přímo z testovací sady knihovny a ukázkových skriptů.


Co je zahrnuto

Přístup k MAPI vlastnostem

Každý soubor MSG je postaven na vlastnostech MAPI. MapiMessage exponuje set_property() a get_property() pro práci s vlastnostmi podle jejich PropertyId enum hodnoty. Použijte iter_properties() k enumeraci všech vlastností zprávy, nebo get_property_value() pro přímé získání hodnoty s volitelným dekódováním 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")

Jak přečíst vlastnosti zpět z existujícího souboru:

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

Příjemci a přílohy

Přidejte příjemce pomocí add_recipient(), přičemž určujete zobrazované jméno a typ příjemce (To, CC nebo BCC). Připojte soubory pomocí add_attachment() s použitím surových bajtů a MIME typu. Pro vnořené zprávy, add_embedded_message_attachment() vkládá kompletní MapiMessage jako podřízený objekt uvnitř nadřazeného.

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

Jak prozkoumat přílohy v existující zprávě:

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

Konverze MSG na EmailMessage

Knihovna provádí konverzi v obou směrech mezi MSG a Python’s email.message.EmailMessage. Použijte to_email_message() k vytvoření standardně kompatibilního objektu MIME, nebo from_email_message() k importu existujícího EmailMessage do formátu MSG. Praktické metody to_email_bytes() a to_email_string() serializovat přímo do bajtů nebo textu.

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

Obousměrná operace s CFB kontejnerem

Vytvářet a serializovat kontejnery Compound File Binary nezávisle na vrstvě MSG. CFBDocument.from_file() načte existující kontejner do měnitelného modelu dokumentu s CFBStorage a CFBStream uzly. CFBWriter.write_file() serializuje dokument zpět na disk deterministicky.

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

Zpracování chyb

Knihovna vyvolá CFBError pro poškozený obsah CFB a MsgError pro neplatnou strukturu MSG. MapiMessage také poskytuje validation_issues vlastnost, která vrací n-tici varovných řetězců bez vyvolání výjimky, což vám umožní rozhodnout, jak přísně zacházet s nevyhovujícími soubory.

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

Quick Start

pip install aspose-email-foss>=26.3

Načtěte existující MSG, přečtěte jeho metadata a vypište přílohy:

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

Podporované formáty

FormátImportExport
MSGAnoAno
CFBAnoAno

Open Source a licencování

Aspose.Email FOSS for Python is released under the MIT License. Můžete jej používat v osobních, interních i komerčních projektech bez omezení. Zdrojový kód je k dispozici na GitHub.


Začínáme