Įvadas

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.

Konteinerio lygyje CFB skaitytuvas ir rašytuvas suteikia jums deterministinę kontrolę prie Compound File Binary dokumentų. Galite naršyti saugojimo hierarchijas, išgauti neapdorotus srauto duomenis, kurti naujus konteinerius nuo nulio ir juos serializuoti atgal į baitus. Abu CFBError ir MsgError teikia struktūruotą išimčių tvarkymą netinkamai suformuotai įvesti.

Šiame įraše išsamiai pristatomos visos galimybės su patikrintais kodo pavyzdžiais, tiesiogiai paimtais iš bibliotekos testų rinkinio ir pavyzdinių skriptų.


Kas įtraukta

MAPI savybių prieiga

Kiekvienas MSG failas yra sukurtas remiantis MAPI savybėmis. MapiMessage atskleidžia set_property() ir get_property() dirbti su savybėmis pagal jų PropertyId enum reikšmę. Naudokite iter_properties() išvardyti visas žinutės savybes, arba get_property_value() tiesioginiam reikšmių gavimui su pasirinktu tipo dekodavimu.

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

Norint perskaityti savybes iš esamo failo:

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

Gavėjai ir priedai

Pridėkite gavėjus su add_recipient(), nurodant rodomąjį vardą ir gavėjo tipą (To, CC, arba BCC). Prisegti failus su add_attachment() naudojant neapdorotus baitus ir MIME tipą. Įdėtiniams pranešimams, add_embedded_message_attachment() įterpia visą MapiMessage kaip vaiko objektą tėvo objekte.

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

Norint peržiūrėti priedus esamoje žinutėje:

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 konvertavimas

Biblioteka konvertuoja abiejomis kryptimis tarp MSG ir Python’s email.message.EmailMessage. Naudokite to_email_message() sukurti standartų atitinkantį MIME objektą, arba from_email_message() importuoti esamą EmailMessage į MSG formatą. Patogūs metodai to_email_bytes() ir to_email_string() serializuoti tiesiogiai į baitus arba tekstą.

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 konteinerio grįžtamasis ciklas

Kurti ir serializuoti Compound File Binary konteinerius nepriklausomai nuo MSG sluoksnio. CFBDocument.from_file() įkelia esamą konteinerį į keičiamą dokumento modelį su CFBStorage ir CFBStream mazgais. CFBWriter.write_file() serializuoja dokumentą atgal į diską deterministiniu būdu.

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

Klaidų tvarkymas

Biblioteka iškelia CFBError netinkamo CFB turinio ir MsgError už neteisingą MSG struktūrą. MapiMessage taip pat atskleidžia validation_issues savybę, kuri grąžina tuple įspėjimų eilučių be išmetimo išimties, leidžiančią jums nuspręsti, kaip griežtai tvarkyti nesuderinamus failus.

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

Greitas pradžia

pip install aspose-email-foss>=26.3

Įkelkite esamą MSG, perskaitykite jo metaduomenis ir išvardinkite priedus:

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

Palaikomi formatai

FormatasImportuotiEksportuoti
MSGTaipTaip
CFBTaipTaip

Atviro kodo ir licencijavimas

Aspose.Email FOSS for Python is released under the MIT License. Galite naudoti jį asmeniniuose, vidiniuose ir komerciniuose projektuose be apribojimų. Šaltinio kodas yra prieinamas GitHub.


Pradžia