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 nivou kontejnera, CFB čitač i pisac vam pružaju determinističku kontrolu nad Compound File Binary dokumentima. Možete pretraživati hijerarhije skladišta, izvući sirove podatke toka, izgraditi nove kontejnere od nule i serijalizovati ih nazad u bajtove. Oba CFBError i MsgError pružaju strukturirano rukovanje izuzecima za neispravan unos.
Ovaj post prolazi kroz svaku mogućnost uz verifikovane primere koda preuzete direktno iz testnog skupa biblioteke i primer skripti.
Šta je uključeno
Pristup MAPI svojstvima
Svaka MSG datoteka je izgrađena na MAPI svojstvima. MapiMessage izlaže set_property() i get_property() za rad sa svojstvima po njihovom PropertyId enum vrednosti. Koristite iter_properties() za nabrajanje svih svojstava u poruci, ili get_property_value() za direktno preuzimanje vrednosti 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ćeg fajla:
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}")
Primaoci i prilozi
Dodajte primaoce pomoću add_recipient(), navodeći prikazano ime i tip primaoca (To, CC, ili BCC). Priložite fajlove pomoću add_attachment() koristeći sirove bajtove i MIME tip. Za ugnježdene poruke, add_embedded_message_attachment() ugrađuje kompletan MapiMessage kao podređeni objekat 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 priloga 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 konvertuje u oba smera između MSG i Python’s email.message.EmailMessage. Koristite to_email_message() za proizvodnju 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() serijalizuju direktno 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
Izgradite i serijalizujte Compound File Binary kontejnere nezavisno od MSG sloja. CFBDocument.from_file() učitava postojeći kontejner u promenljivi model dokumenta sa CFBStorage i CFBStream čvorova. CFBWriter.write_file() serijalizuje dokument nazad 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")
Upravljanje greškama
Biblioteka baca CFBError za neispravan CFB sadržaj i MsgError za nevažeću MSG strukturu. MapiMessage takođe izlaže validation_issues svojstvo koje vraća tuple upozoravajućih stringova bez podizanja izuzetka, omogućavajući vam da odlučite koliko strogo da postupate sa neusklađenim fajlovima.
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 priloge:
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 ličnim, internim i komercijalnim projektima bez ograničenja. Izvorni kod je dostupan na GitHub.