Einleitung
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.
Auf Container-Ebene bieten Ihnen der CFB-Leser und -Schreiber deterministische Kontrolle über Compound File Binary-Dokumente. Sie können Speicherhierarchien durchlaufen, Rohstromdaten extrahieren, neue Container von Grund auf neu erstellen und sie wieder in Bytes serialisieren. Beide CFBError und MsgError bieten eine strukturierte Ausnahmebehandlung für fehlerhafte Eingaben.
Dieser Beitrag führt durch jede Funktionalität mit verifizierten Codebeispielen, die direkt aus dem eigenen Test‑Suite und den Beispiel‑Skripten der Bibliothek stammen.
Was enthalten ist
MAPI-Property-Zugriff
Jede MSG-Datei basiert auf MAPI-Eigenschaften. MapiMessage stellt bereit set_property() und get_property() um mit Eigenschaften über deren PropertyId Enum-Wert zu arbeiten. Verwenden Sie iter_properties() um alle Eigenschaften einer Nachricht aufzulisten, oder get_property_value() für die direkte Wertabfrage mit optionaler Typdekodierung.
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")
Um Properties aus einer bestehenden Datei zu lesen:
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}")
Empfänger und Anhänge
Empfänger hinzufügen mit add_recipient(), wobei der Anzeigename und der Empfängertyp (To, CC oder BCC) angegeben werden. Dateien anhängen mit add_attachment() unter Verwendung von Rohbytes und einem MIME-Typ. Für verschachtelte Nachrichten, add_embedded_message_attachment() bettet ein vollständiges MapiMessage als Kindobjekt innerhalb des Elternteils.
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")
Um Anhänge einer bestehenden Nachricht zu untersuchen:
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‑zu‑EmailMessage‑Konvertierung
Die Bibliothek konvertiert in beide Richtungen zwischen MSG und Python’s email.message.EmailMessage. Verwenden to_email_message() um ein standardkonformes MIME-Objekt zu erzeugen, oder from_email_message() um ein bestehendes zu importieren EmailMessage in das MSG-Format. Komfortmethoden to_email_bytes() und to_email_string() serialisieren direkt zu Bytes oder Text.
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‑Rundlauf
Erstellen und serialisieren Sie Compound File Binary-Container unabhängig von der MSG-Schicht. CFBDocument.from_file() lädt einen bestehenden Container in ein veränderbares Dokumentenmodell mit CFBStorage und CFBStream Knoten. CFBWriter.write_file() serialisiert das Dokument deterministisch zurück auf die Festplatte.
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")
Fehlerbehandlung
Die Bibliothek wirft CFBError bei fehlerhaftem CFB-Inhalt und MsgError bei ungültiger MSG-Struktur. MapiMessage stellt außerdem ein validation_issues Eigenschaft bereit, die ein Tupel von Warnmeldungen zurückgibt, ohne eine Ausnahme zu werfen, sodass Sie entscheiden können, wie streng nicht konforme Dateien behandelt werden sollen.
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}")
Schnellstart
pip install aspose-email-foss>=26.3
Laden Sie eine bestehende MSG, lesen Sie deren Metadaten und listen Sie die Anhänge auf:
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}")
Unterstützte Formate
| Format | Import | Export |
|---|---|---|
| MSG | Ja | Ja |
| CFB | Ja | Ja |
Open Source und Lizenzierung
Aspose.Email FOSS for Python is released under the MIT-Lizenz. Sie können es in privaten, internen und kommerziellen Projekten ohne Einschränkung verwenden. Der Quellcode ist verfügbar auf GitHub.