Ú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 kontejneru vám čtečka a zapisovač CFB poskytují deterministickou kontrolu nad dokumenty Compound File Binary. Můžete procházet hierarchie úložišť, extrahovat surová data proudu, vytvářet nové kontejnery od nuly a serializovat je zpět do bajtů. Oba CFBError a MsgError poskytují strukturované zpracování výjimek pro poškozený vstup.
Tento příspěvek prochází každou funkci s ověřenými ukázkami kódu čerpajícími přímo z testovací sady knihovny a ukázkových skriptů.
Co je zahrnuto
Přístup k MAPI vlastnostem
Každý soubor MSG je postaven na vlastnostech MAPI. MapiMessage exponuje set_property() a get_property() pro práci s vlastnostmi podle jejich PropertyId enum hodnoty. Použijte iter_properties() k enumeraci všech vlastností zprávy, nebo get_property_value() pro přímé získání hodnoty s volitelným dekódování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")
Jak přečíst vlastnosti zpět z existujícího souboru:
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}")
Příjemci a přílohy
Přidejte příjemce pomocí add_recipient(), přičemž určujete zobrazované jméno a typ příjemce (To, CC nebo BCC). Připojte soubory pomocí add_attachment() s použitím surových bajtů a MIME typu. Pro vnořené zprávy, add_embedded_message_attachment() vkládá kompletní MapiMessage jako podřízený objekt uvnitř nadřazeného.
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")
Jak prozkoumat přílohy v existující zprávě:
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}")
Konverze MSG na EmailMessage
Knihovna provádí konverzi v obou směrech mezi MSG a Python’s email.message.EmailMessage. Použijte to_email_message() k vytvoření standardně kompatibilního objektu MIME, nebo from_email_message() k importu existujícího EmailMessage do formátu MSG. Praktické metody to_email_bytes() a to_email_string() serializovat přímo do bajtů nebo 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]}")
Obousměrná operace s CFB kontejnerem
Vytvářet a serializovat kontejnery Compound File Binary nezávisle na vrstvě MSG. CFBDocument.from_file() načte existující kontejner do měnitelného modelu dokumentu s CFBStorage a CFBStream uzly. CFBWriter.write_file() serializuje dokument zpět 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")
Zpracování chyb
Knihovna vyvolá CFBError pro poškozený obsah CFB a MsgError pro neplatnou strukturu MSG. MapiMessage také poskytuje validation_issues vlastnost, která vrací n-tici varovných řetězců bez vyvolání výjimky, což vám umožní rozhodnout, jak přísně zacházet s nevyhovujícími soubory.
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}")
Quick Start
pip install aspose-email-foss>=26.3
Načtěte existující MSG, přečtěte jeho metadata a vypište pří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 | Ano | Ano |
| CFB | Ano | Ano |
Open Source a licencování
Aspose.Email FOSS for Python is released under the MIT License. Můžete jej používat v osobních, interních i komerčních projektech bez omezení. Zdrojový kód je k dispozici na GitHub.