Introduktion

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.

På container-niveau giver CFB-læseren og -skriveren dig deterministisk kontrol over Compound File Binary-dokumenter. Du kan traversere lagringshierarkier, udtrække rå strømdata, bygge nye containere fra bunden og serialisere dem tilbage til bytes. Begge CFBError og MsgError leverer struktureret undtagelseshåndtering for fejlbehæftet input.

Dette indlæg gennemgår hver funktionalitet med verificerede kodeeksempler hentet direkte fra bibliotekets egen testpakke og eksempelscripts.


Hvad der er inkluderet

MAPI‑egenskabstilgang

Hver MSG-fil er bygget på MAPI-egenskaber. MapiMessage eksponerer set_property() og get_property() for at arbejde med egenskaber efter deres PropertyId enum-værdi. Brug iter_properties() til at enumerere alle egenskaber på en besked, eller get_property_value() til direkte værdiudtræk med valgfri typeafkodning.

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

For at læse egenskaber tilbage fra en eksisterende fil:

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

Modtagere og vedhæftninger

Tilføj modtagere med add_recipient(), angiv visningsnavn og modtagertype (To, CC eller BCC). Vedhæft filer med add_attachment() ved brug af rå bytes og en MIME-type. For indlejrede beskeder, add_embedded_message_attachment() indlejrer en komplet MapiMessage som et underordnet objekt inde i forælderen.

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

For at inspicere vedhæftninger på en eksisterende besked:

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 til EmailMessage‑konvertering

Biblioteket konverterer i begge retninger mellem MSG og Python’s email.message.EmailMessage. Brug to_email_message() til at producere et standard‑overensstemmende MIME‑objekt, eller from_email_message() til at importere en eksisterende EmailMessage til MSG-formatet. Praktiske metoder to_email_bytes() og to_email_string() serialiserer direkte til bytes eller 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

Byg og serialiser Compound File Binary-containere uafhængigt af MSG-laget. CFBDocument.from_file() indlæser en eksisterende container i en muterbar dokumentmodel med CFBStorage og CFBStream noder. CFBWriter.write_file() serialiserer dokumentet tilbage til disken deterministisk.

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

Fejlhåndtering

Biblioteket rejser CFBError for fejlbehæftet CFB-indhold og MsgError for ugyldig MSG-struktur. MapiMessage eksponerer også en validation_issues egenskab, der returnerer en tuple af advarselsstrenge uden at rejse en undtagelse, så du kan beslutte, hvor streng du vil håndtere ikke‑overensstemmende filer.

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

Hurtig start

pip install aspose-email-foss>=26.3

Indlæs en eksisterende MSG, læs dens metadata, og list vedhæftede filer:

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

Understøttede formater

FormatImportExport
MSGJaJa
CFBJaJa

Open Source & Licensering

Aspose.Email FOSS for Python is released under the MIT License. Du må bruge det i personlige, interne og kommercielle projekter uden restriktion. Kildekoden er tilgængelig på GitHub.


Kom i gang