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.

Säiliötasolla CFB-lukija ja -kirjoittaja antavat sinulle deterministisen hallinnan Compound File Binary -dokumenteihin. Voit kulkea tallennushierarkioita, poimia raakavirran dataa, rakentaa uusia säiliöitä alusta alkaen ja sarjoittaa ne takaisin tavuiksi. Molemmat CFBError ja MsgError tarjoavat rakenteellisen poikkeusten käsittelyn 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-ominaisuuden käyttö

Jokainen MSG-tiedosto perustuu MAPI-ominaisuuksiin. MapiMessage paljastaa set_property() ja get_property() työskennellä ominaisuuksien kanssa niiden PropertyId enum-arvon perusteella. Käytä iter_properties() kaikkien viestin ominaisuuksien luettelointiin, tai get_property_value() suoraan arvon hakemiseen valinnaisella tyyppien purkamisella.

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

Lukemaan ominaisuuksia 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 käyttäen add_recipient(), määrittäen näytettävän nimen ja vastaanottajan tyypin (To, CC tai BCC). add_attachment() Liitä tiedostoja käyttäen, add_embedded_message_attachment() raakabittejä ja MIME-tyyppiä. Sisäkkäisille viesteille, MapiMessage upottaa täydellisen.

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 tarkasteluun 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:n muuntaminen EmailMessageksi

lapsiobjektina vanhemman sisään. Kirjasto muuntaa molempiin suuntiin MSG:n ja Python’n välillä. email.message.EmailMessage. Käytä to_email_message() tuottaa standardien mukaisen MIME-objektin, tai from_email_message() tuodakseen 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 kiertomatka

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 & 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 on GitHub.


Aloittaminen