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ă 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 capacitate 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 prin PropertyId valoare enum. Folosește 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

Adaugă destinatari cu add_recipient(), specificând numele afișat și tipul destinatarului (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 în 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() serializați 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]}")

Round-Trip container 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() serializează 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 invalidă. MapiMessage expune, de asemenea, un validation_issues proprietate care returnează un tuplu de șiruri de avertizare fără a ridica o excepție, permițându-ți să decizi cât de strict să gestionezi 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}")

Începe rapid

pip install aspose-email-foss>=26.3

Încarcă un MSG existent, citește metadatele sale și afișează 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 suportate

FormatImportExport
MSGDaDa
CFBDaDa

Open Source și Licențiere

Aspose.Email FOSS for Python is released under the MIT License. Puteți să o folosiți în proiecte personale, interne și comerciale fără restricție. Codul sursă este disponibil pe GitHub.


Începeți