Johdanto

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.

Kontti-tasolla CFB-lukija ja -kirjoittaja antavat sinulle deterministisen hallinnan Compound File Binary -dokumentteihin. Voit kulkea tallennushierarkioita, poimia raakavirta‑dataa, rakentaa uusia kontteja alusta alkaen ja sarjoittaa ne takaisin tavuiksi. Molemmat CFBError ja MsgError tarjoa rakenteellista poikkeusten käsittelyä virheelliselle syötteelle.

Tässä artikkelissa käydään läpi jokainen ominaisuus vahvistetuilla koodiesimerkeillä, jotka on otettu suoraan kirjaston omasta testisarjasta ja esimerkkiskripteistä.


Mitä sisältyy

MAPI-ominaisuuksien käyttö

Jokainen MSG-tiedosto perustuu MAPI-ominaisuuksiin. MapiMessage paljastaa set_property() ja get_property() työskennellä ominaisuuksien mukaan PropertyId enum-arvo. Käytä iter_properties() luetella kaikki viestin ominaisuudet, tai get_property_value() suoraan arvon hakemiseen valinnaisella tyyppidekoodauksella.

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

Ominaisuuksien lukeminen takaisin olemassa olevasta tiedostosta:

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

Vastaanottajat ja liitteet

Lisää vastaanottajia add_recipient(), määrittäen näyttönimen ja vastaanottajatyyppi (To, CC tai BCC). Liitä tiedostoja add_attachment() käyttäen raakabittejä ja MIME-tyyppiä. Sisäkkäisille viesteille, add_embedded_message_attachment() upottaa täydellisen MapiMessage lapsiobjektina vanhemman sisällä.

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

Liitteiden tarkastelu olemassa olevassa viestissä:

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

MSG → EmailMessage -muunnos

Kirjasto muuntaa molempiin suuntiin MSG:n ja Python:n välillä. email.message.EmailMessage. Käytä to_email_message() luodaksesi standardien mukaisen MIME-objektin, tai from_email_message() tuodaksesi olemassa olevan EmailMessage MSG-muotoon. Kätevät metodit to_email_bytes() ja to_email_string() sarjoittaa suoraan tavuiksi tai tekstiksi.

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-säiliön kierrätys

Rakenna ja sarjoita Compound File Binary -kontit riippumatta MSG-kerroksesta. CFBDocument.from_file() lataa olemassa olevan kontin muokattavaan asiakirjamalliin, jossa on CFBStorage ja CFBStream solmut. CFBWriter.write_file() sarjoittaa asiakirjan takaisin levylle deterministisesti.

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

Virheenkäsittely

Kirjasto nostaa CFBError virheellisen CFB-sisällön tapauksessa ja MsgError virheellisen MSG-rakenteen tapauksessa. MapiMessage myös tarjoaa validation_issues ominaisuuden, joka palauttaa tuple-varoitusmerkkijonoja ilman poikkeuksen nostamista, jolloin voit itse päättää, kuinka tiukasti käsitellä ei‑standardin mukaisia tiedostoja.

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

Pika-aloitus

pip install aspose-email-foss>=26.3

Lataa olemassa oleva MSG, lue sen metatiedot ja listaa liitteet:

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

Tuetut formaatit

MuotoTuoVie
MSGKylläKyllä
CFBKylläKyllä

Avoin lähdekoodi ja lisensointi

Aspose.Email FOSS for Python is released under the MIT License. Voit käyttää sitä henkilökohtaisissa, sisäisissä ja kaupallisissa projekteissa ilman rajoituksia. Lähdekoodi on saatavilla GitHub.


Aloittaminen