Ú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 kontajnera vám čítač a zapisovač CFB poskytujú deterministickú kontrolu nad dokumentmi Compound File Binary. Môžete prechádzať hierarchie úložísk, extrahovať surové dáta prúdu, vytvárať nové kontajnery od nuly a serializovať ich späť do bajtov. Obe CFBError a MsgError poskytujú štruktúrované spracovanie výnimiek pre nesprávny vstup.

Tento príspevok prechádza každú funkciu s overenými príkladmi kódu čerpanými priamo z testovacej sady knižnice a ukážkových skriptov.


Čo je zahrnuté

Prístup k MAPI vlastnostiam

Každý súbor MSG je postavený na MAPI vlastnostiach. MapiMessage exponuje set_property() a get_property() na prácu s vlastnosťami podľa ich PropertyId enum hodnoty. Použite iter_properties() na enumeráciu všetkých vlastností v správe, alebo get_property_value() pre priame získavanie hodnôt s voliteľným dekódovaní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")

Na načítanie vlastností späť z existujúceho súboru:

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}")

Príjemcovia a prílohy

Pridajte príjemcov pomocou add_recipient(), pričom špecifikujete zobrazované meno a typ príjemcu (To, CC alebo BCC). Pripojte súbory pomocou add_attachment() s použitím surových bajtov a MIME typu. Pre vnorené správy, add_embedded_message_attachment() vloží kompletný MapiMessage ako podobjekt do rodiča.

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")

Na prehliadnutie príloh v existujúcej správe:

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}")

Konverzia MSG na EmailMessage

Knižnica konvertuje v oboch smeroch medzi MSG a Python’s email.message.EmailMessage. Použiť to_email_message() na vytvorenie MIME objektu kompatibilného so štandardmi, alebo from_email_message() na import existujúceho EmailMessage do formátu MSG. Praktické metódy to_email_bytes() a to_email_string() serializovať priamo do bajtov alebo 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]}")

CFB kontajner – obojsmerný prechod

Vytvárať a serializovať kontajnery Compound File Binary nezávisle od vrstvy MSG. CFBDocument.from_file() načíta existujúci kontajner do mutovateľného modelu dokumentu s CFBStorage a CFBStream uzlami. CFBWriter.write_file() serializuje dokument späť 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")

Spracovanie chýb

Knižnica vyvolá CFBError pre neplatný obsah CFB a MsgError pre neplatnú štruktúru MSG. MapiMessage tiež poskytuje validation_issues vlastnosť, ktorá vracia n-ticu reťazcov varovaní bez vyvolania výnimky, čo vám umožní rozhodnúť, ako prísne spracovať nevyhovujúce súbory.

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}")

Rýchly štart

pip install aspose-email-foss>=26.3

Načítajte existujúci MSG, prečítajte jeho metadáta a vypíšte prí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átImportExport
MSGÁnoÁno
CFBÁnoÁno

Open Source a licencovanie

Aspose.Email FOSS for Python is released under the MIT License. Môžete ho používať v osobných, interných a komerčných projektoch bez obmedzenia. Zdrojový kód je dostupný na GitHub.


Začíname