Ú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 kontajnera vám čítač a zapisovač CFB poskytujú deterministickú kontrolu nad dokumentmi Compound File Binary. Môžete prechádzať hierarchie úložísk, extrahovať surové dáta prúdu, vytvárať nové kontajnery od nuly a serializovať ich späť do bajtov. Obe CFBError a MsgError poskytujú štruktúrované spracovanie výnimiek pre nesprávny vstup.
Tento príspevok prechádza každú funkciu s overenými príkladmi kódu čerpanými priamo z testovacej sady knižnice a ukážkových skriptov.
Čo je zahrnuté
Prístup k MAPI vlastnostiam
Každý súbor MSG je postavený na MAPI vlastnostiach. MapiMessage exponuje set_property() a get_property() na prácu s vlastnosťami podľa ich PropertyId enum hodnoty. Použite iter_properties() na enumeráciu všetkých vlastností v správe, alebo get_property_value() pre priame získavanie hodnôt s voliteľným dekódovaní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")
Na načítanie vlastností späť z existujúceho súboru:
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}")
Príjemcovia a prílohy
Pridajte príjemcov pomocou add_recipient(), pričom špecifikujete zobrazované meno a typ príjemcu (To, CC alebo BCC). Pripojte súbory pomocou add_attachment() s použitím surových bajtov a MIME typu. Pre vnorené správy, add_embedded_message_attachment() vloží kompletný MapiMessage ako podobjekt do rodiča.
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")
Na prehliadnutie príloh v existujúcej správe:
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}")
Konverzia MSG na EmailMessage
Knižnica konvertuje v oboch smeroch medzi MSG a Python’s email.message.EmailMessage. Použiť to_email_message() na vytvorenie MIME objektu kompatibilného so štandardmi, alebo from_email_message() na import existujúceho EmailMessage do formátu MSG. Praktické metódy to_email_bytes() a to_email_string() serializovať priamo do bajtov alebo 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]}")
CFB kontajner – obojsmerný prechod
Vytvárať a serializovať kontajnery Compound File Binary nezávisle od vrstvy MSG. CFBDocument.from_file() načíta existujúci kontajner do mutovateľného modelu dokumentu s CFBStorage a CFBStream uzlami. CFBWriter.write_file() serializuje dokument späť 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")
Spracovanie chýb
Knižnica vyvolá CFBError pre neplatný obsah CFB a MsgError pre neplatnú štruktúru MSG. MapiMessage tiež poskytuje validation_issues vlastnosť, ktorá vracia n-ticu reťazcov varovaní bez vyvolania výnimky, čo vám umožní rozhodnúť, ako prísne spracovať nevyhovujúce súbory.
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}")
Rýchly štart
pip install aspose-email-foss>=26.3
Načítajte existujúci MSG, prečítajte jeho metadáta a vypíšte prí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át | Import | Export |
|---|---|---|
| MSG | Áno | Áno |
| CFB | Áno | Áno |
Open Source a licencovanie
Aspose.Email FOSS for Python is released under the MIT License. Môžete ho používať v osobných, interných a komerčných projektoch bez obmedzenia. Zdrojový kód je dostupný na GitHub.