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å containernivå ger CFB-läsaren och -skrivaren dig deterministisk kontroll över Compound File Binary-dokument. Du kan traversera lagringshierarkier, extrahera råa strömdata, bygga nya containrar från grunden och serialisera dem tillbaka till byte. Båda CFBError och MsgError tillhandahåller strukturerad undantagshantering för felaktig inmatning.
Detta inlägg går igenom varje funktion med verifierade kodexempel hämtade direkt från bibliotekets egna testsvit och exempel‑skript.
Vad som ingår
MAPI‑egenskapsåtkomst
Varje MSG-fil är byggd på MAPI-egenskaper. MapiMessage exponerar set_property() och get_property() för att arbeta med egenskaper via deras PropertyId enum‑värde. Använd iter_properties() för att enumerera alla egenskaper på ett meddelande, eller get_property_value() för direkt värdehämtning med valfri typavkodning.
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")
För att läsa egenskaper från en befintlig 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}")
Mottagare och bilagor
Lägg till mottagare med add_recipient(), ange visningsnamn och mottagartyp (Till, Kopia eller Kopia dold). Bifoga filer med add_attachment() med råa byte och en MIME-typ. För nästlade meddelanden, add_embedded_message_attachment() bäddar in en komplett MapiMessage som ett barnobjekt i föräldern.
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")
För att inspektera bilagor i ett befintligt meddelande:
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 till EmailMessage‑konvertering
Biblioteket konverterar i båda riktningarna mellan MSG och Pythons email.message.EmailMessage. Använd to_email_message() för att producera ett standardkompatibelt MIME-objekt, eller from_email_message() för att importera en befintlig EmailMessage till MSG-formatet. Bekvämlighetsmetoder to_email_bytes() och to_email_string() serialiserar direkt till byte eller 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 rundresa
Bygg och serialisera Compound File Binary-containrar oberoende av MSG-lagret. CFBDocument.from_file() läser in en befintlig container i en muterbar dokumentmodell med CFBStorage och CFBStream noder. CFBWriter.write_file() serialiserar dokumentet tillbaka till disk deterministiskt.
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")
Felhantering
Biblioteket kastar CFBError för felaktigt CFB-innehåll och MsgError för ogiltig MSG-struktur. MapiMessage exponerar också en validation_issues egenskap som returnerar en tupel av varningssträngar utan att kasta ett undantag, så att du kan bestämma hur strikt du vill hantera icke-konforma 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}")
Snabbstart
pip install aspose-email-foss>=26.3
Ladda ett befintligt MSG, läs dess metadata och lista bilagor:
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}")
Stödda format
| Format | Import | Export |
|---|---|---|
| MSG | Ja | Ja |
| CFB | Ja | Ja |
Öppen källkod & licensiering
Aspose.Email FOSS for Python is released under the MIT License. Du kan använda den i personliga, interna och kommersiella projekt utan restriktioner. Källkoden är tillgänglig på GitHub.