Pengenalan

Aspose.Email FOSS untuk Python melampaui penciptaan mesej asas. Perpustakaan ini mendedahkan kedalaman penuh model sifat MAPI, membolehkan anda membaca, menulis, dan menanyakan sifat individu mengikut ID dan jenis. Ia mengendalikan penerima, lampiran, dan mesej terbenam sebagai objek kelas pertama, dan menyediakan penukaran dua hala antara format binari MSG dan standard email.message.EmailMessage Python.

Pada peringkat kontena, pembaca dan penulis CFB memberi anda kawalan deterministik ke atas dokumen Compound File Binary. Anda boleh menelusuri hierarki storan, mengekstrak data aliran mentah, membina kontena baru dari awal, dan menserialkannya kembali ke bait. Kedua-dua CFBError dan MsgError menyediakan pengendalian pengecualian berstruktur untuk input yang tidak sah.

Pos ini membimbing melalui setiap keupayaan dengan contoh kod yang disahkan yang diambil secara langsung daripada suite ujian perpustakaan dan skrip contoh.


Apa yang Termasuk

Akses Sifat MAPI

Setiap fail MSG dibina atas sifat MAPI. MapiMessage mendedahkan set_property() dan get_property() untuk bekerja dengan sifat mengikut nilai enum PropertyId mereka. Gunakan iter_properties() untuk menyenaraikan semua sifat pada mesej, atau get_property_value() untuk mendapatkan nilai secara langsung dengan pengekodan jenis pilihan.

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

Untuk membaca semula sifat-sifat daripada fail yang sedia ada:

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

Penerima dan Lampiran

Tambah penerima dengan add_recipient(), menentukan nama paparan dan jenis penerima (To, CC, atau BCC). Lampirkan fail dengan add_attachment() menggunakan bait mentah dan jenis MIME. Untuk mesej bersarang, add_embedded_message_attachment() menyematkan MapiMessage lengkap sebagai objek anak di dalam ibu bapa.

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

Untuk memeriksa lampiran pada mesej yang sedia ada:

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

Penukaran MSG kepada EmailMessage

Perpustakaan menukar dalam kedua‑dua arah antara MSG dan email.message.EmailMessage Python. Gunakan to_email_message() untuk menghasilkan objek MIME yang mematuhi piawaian, atau from_email_message() untuk mengimport EmailMessage sedia ada ke dalam format MSG. Kaedah kemudahan to_email_bytes() dan to_email_string() menserialkan secara langsung ke bytes atau teks.

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 Container Round-Trip

Bina dan susun semula kontena Compound File Binary secara bebas daripada lapisan MSG. CFBDocument.from_file() memuatkan kontena sedia ada ke dalam model dokumen yang boleh diubah dengan nod CFBStorage dan CFBStream. CFBWriter.write_file() menyusun semula dokumen kembali ke cakera secara deterministik.

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

Pengendalian Ralat

Pustaka ini membangkitkan CFBError untuk kandungan CFB yang rosak dan MsgError untuk struktur MSG yang tidak sah. MapiMessage juga mendedahkan sifat validation_issues yang mengembalikan tuple rentetan amaran tanpa membangkitkan pengecualian, membolehkan anda memutuskan betapa ketatnya menangani fail yang tidak mematuhi.

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

Permulaan Cepat

pip install aspose-email-foss>=26.3

Muat MSG yang sedia ada, baca metadata, dan senaraikan lampiran:

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

Format yang Disokong

FormatImportEksport
MSGYaYa
CFBYaYa

Sumber Terbuka & Pelesenan

Aspose.Email FOSS untuk Python dikeluarkan di bawah MIT License. Anda boleh menggunakannya dalam projek peribadi, dalaman, dan komersial tanpa sekatan. Kod sumber tersedia di GitHub.


Memulakan