Introducere
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.
La nivelul containerului, cititorul și scriitorul CFB îți oferă un control determinist asupra documentelor Compound File Binary. Poți parcurge ierarhiile de stocare, extrage date brute de flux, construi noi containere de la zero și le poți serializa înapoi în octeți. Ambele CFBError și MsgError furnizează gestionarea structurată a excepțiilor pentru intrări malformate.
Acest articol parcurge fiecare funcționalitate cu exemple de cod verificate, preluate direct din suita de teste a bibliotecii și din scripturile de exemplu.
Ce este inclus
Acces la proprietăți MAPI
Fiecare fișier MSG este construit pe proprietăți MAPI. MapiMessage expune set_property() și get_property() pentru a lucra cu proprietățile după PropertyId valoarea enum. Utilizați iter_properties() pentru a enumera toate proprietățile unui mesaj, sau get_property_value() pentru recuperarea directă a valorii cu decodare opțională a tipului.
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")
Pentru a citi proprietățile dintr-un fișier existent:
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}")
Destinatari și atașamente
Adăugați destinatari cu add_recipient(), specificând numele afișat și tipul de destinatar (To, CC sau BCC). Atașați fișiere cu add_attachment() folosind octeți brute și un tip MIME. Pentru mesaje imbricate, add_embedded_message_attachment() încorporează un complet MapiMessage ca obiect copil în interiorul părintelui.
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")
Pentru a inspecta atașamentele unui mesaj existent:
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}")
Conversia MSG la EmailMessage
Biblioteca convertește în ambele direcții între MSG și Python’s email.message.EmailMessage. Utilizați to_email_message() pentru a produce un obiect MIME conform standardelor, sau from_email_message() pentru a importa un existent EmailMessage în formatul MSG. Metode convenabile to_email_bytes() și to_email_string() serializează direct în octeți sau 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]}")
Traseu complet al containerului CFB
Construiește și serializează containerele Compound File Binary independent de stratul MSG. CFBDocument.from_file() încarcă un container existent într-un model de document mutabil cu CFBStorage și CFBStream noduri. CFBWriter.write_file() serializa documentul înapoi pe disc în mod determinist.
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")
Gestionarea erorilor
Biblioteca ridică CFBError pentru conținut CFB malformat și MsgError pentru structură MSG nevalidă. MapiMessage de asemenea expune un validation_issues proprietate care returnează un tuplu de șiruri de avertizare fără a ridica o excepție, permițându-vă să decideți cât de strict să gestionați fișierele neconforme.
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}")
Pornire rapidă
pip install aspose-email-foss>=26.3
Încărcați un MSG existent, citiți metadatele sale și listați atașamentele:
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}")
Formate acceptate
| Format | Import | Export |
|---|---|---|
| MSG | Da | Da |
| CFB | Da | Da |
Open Source și licențiere
Aspose.Email FOSS for Python is released under the MIT License. Puteți să îl utilizaţi în proiecte personale, interne şi comerciale fără restricţii. Codul sursă este disponibil pe GitHub.