Uvod
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 razini kontejnera, CFB čitač i pisac pružaju determinističku kontrolu nad Compound File Binary dokumentima. Možete prolaziti kroz hijerarhije pohrane, izvući sirove podatke toka, izgraditi nove kontejere od nule i serijalizirati ih natrag u bajtove. Oba CFBError i MsgError omogućuju strukturirano rukovanje iznimkama za neispravan unos.
Ovaj članak prolazi kroz svaku mogućnost uz provjerene primjere koda preuzete iz testnog skupa biblioteke i primjernih skripti.
Što je uključeno
Pristup MAPI svojstvima
Svaka MSG datoteka temelji se na MAPI svojstvima. MapiMessage izlaže set_property() i get_property() za rad sa svojstvima prema njihovoj PropertyId enum vrijednosti. Koristite iter_properties() za nabrajanje svih svojstava u poruci, ili get_property_value() za izravno dohvaćanje vrijednosti uz opcionalno dekodiranje tipa.
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")
Za čitanje svojstava iz postojeće datoteke:
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}")
Primatelji i privitci
Dodajte primatelje pomoću add_recipient(), navodeći prikazno ime i tip primatelja (To, CC ili BCC). Priložite datoteke pomoću add_attachment() koristeći sirove bajtove i MIME tip. Za ugniježdene poruke, add_embedded_message_attachment() ugrađuje potpunu MapiMessage kao objekt djeteta unutar roditelja.
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")
Za pregled privitaka u postojećoj poruci:
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}")
Konverzija MSG u EmailMessage
Biblioteka konvertira u oba smjera između MSG i Python’s email.message.EmailMessage. Koristite to_email_message() za izradu MIME objekta koji je u skladu sa standardima, ili from_email_message() za uvoz postojećeg EmailMessage u MSG format. Metode za praktičnost to_email_bytes() i to_email_string() serijaliziraj izravno u bajtove ili 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 kontejnerski povratni ciklus
Izgradi i serijaliziraj Compound File Binary kontejnere neovisno o MSG sloju. CFBDocument.from_file() učitava postojeći kontejner u promjenjivi model dokumenta s CFBStorage i CFBStream čvorovima. CFBWriter.write_file() serijalizira dokument natrag na disk deterministično.
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")
Rukovanje pogreškama
Biblioteka baca CFBError za neispravan CFB sadržaj i MsgError za nevaljanu MSG strukturu. MapiMessage također izlaže validation_issues svojstvo koje vraća tuple upozoravajućih stringova bez podizanja iznimke, omogućujući vam da odlučite koliko strogo rukovati s neusklađenim datotekama.
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}")
Brzi početak
pip install aspose-email-foss>=26.3
Učitajte postojeći MSG, pročitajte njegove metapodatke i izlistajte privitke:
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}")
Podržani formati
| Format | Uvoz | Izvoz |
|---|---|---|
| MSG | Da | Da |
| CFB | Da | Da |
Open source i licenciranje
Aspose.Email FOSS for Python is released under the MIT License. Možete ga koristiti u osobnim, internim i komercijalnim projektima bez ograničenja. Izvorni kod je dostupan na GitHub.