Introductie

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.

Op container-niveau geven de CFB-lezer en -schrijver je deterministische controle over Compound File Binary-documenten. Je kunt opslaghiërarchieën doorlopen, ruwe streamgegevens extraheren, nieuwe containers vanaf nul bouwen en ze weer serialiseren naar bytes. Beide CFBError en MsgError bieden gestructureerde exceptieafhandeling voor misvormde invoer.

Deze post loopt door elke functionaliteit met geverifieerde codevoorbeelden die rechtstreeks uit de eigen testsuite en voorbeeldscripts van de bibliotheek zijn gehaald.


Wat er inbegrepen is

MAPI-eigenschapstoegang

Elk MSG-bestand is opgebouwd uit MAPI-eigenschappen. MapiMessage stelt set_property() en get_property() om met eigenschappen te werken via hun PropertyId enum-waarde. Gebruik iter_properties() om alle eigenschappen van een bericht te enumereren, of get_property_value() voor directe waarde‑ophaling met optionele type‑decodering.

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

Om eigenschappen terug te lezen uit een bestaand bestand:

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

Ontvangers en bijlagen

Voeg ontvangers toe met add_recipient(), waarbij je weergavenaam en ontvangerstype (Aan, CC of BCC) opgeeft. Voeg bestanden toe met add_attachment() met ruwe bytes en een MIME-type. Voor geneste berichten, add_embedded_message_attachment() voegt een volledige MapiMessage als een kindobject binnen de ouder.

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

Om bijlagen van een bestaand bericht te inspecteren:

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

MSG-naar-EmailMessage-conversie

De bibliotheek converteert in beide richtingen tussen MSG en Python’s email.message.EmailMessage. Gebruik to_email_message() om een standaarden-conform MIME-object te produceren, of from_email_message() om een bestaande te importeren EmailMessage naar het MSG-formaat. Handige methoden to_email_bytes() en to_email_string() serialiseren direct naar bytes of tekst.

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

CFB-container round-trip

Bouw en serialiseer Compound File Binary-containers onafhankelijk van de MSG-laag. CFBDocument.from_file() laadt een bestaande container in een mutabel documentmodel met CFBStorage en CFBStream knooppunten. CFBWriter.write_file() serialiseert het document deterministisch terug naar schijf.

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

Foutafhandeling

De bibliotheek werpt CFBError voor misvormde CFB-inhoud en MsgError voor ongeldige MSG-structuur. MapiMessage biedt ook een validation_issues eigenschap die een tuple van waarschuwingsstrings retourneert zonder een uitzondering te werpen, zodat je kunt bepalen hoe strikt je niet-conforme bestanden wilt behandelen.

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

Snelle start

pip install aspose-email-foss>=26.3

Laad een bestaande MSG, lees de metadata en lijst de bijlagen op:

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

Ondersteunde formaten

FormaatImporterenExporteren
MSGJaJa
CFBJaJa

Open source en licensering

Aspose.Email FOSS for Python is released under the MIT License. Je mag het gebruiken in persoonlijke, interne en commerciële projecten zonder beperking. De broncode is beschikbaar op GitHub.


Aan de slag