Pendahuluan
Aspose.Email FOSS for Python melampaui pembuatan pesan dasar. Perpustakaan ini mengekspos kedalaman penuh model properti MAPI, memungkinkan Anda membaca, menulis, dan mengkueri properti individual berdasarkan ID dan tipe. Ia menangani penerima, lampiran, dan pesan tersemat sebagai objek kelas pertama, dan menyediakan konversi dua arah antara format biner MSG dan standar Python email.message.EmailMessage.
Pada tingkat kontainer, pembaca dan penulis CFB memberi Anda kontrol deterministik atas dokumen Compound File Binary. Anda dapat menelusuri hierarki penyimpanan, mengekstrak data aliran mentah, membangun kontainer baru dari awal, dan menyerialkannya kembali ke byte. Baik CFBError maupun MsgError menyediakan penanganan pengecualian terstruktur untuk input yang tidak sesuai.
Posting ini membahas setiap kemampuan dengan contoh kode yang terverifikasi yang diambil langsung dari suite pengujian dan skrip contoh perpustakaan itu sendiri.
Apa yang Termasuk
Akses Properti MAPI
Setiap file MSG dibangun di atas properti MAPI. MapiMessage mengekspos set_property() dan get_property() untuk bekerja dengan properti berdasarkan nilai enum PropertyId mereka. Gunakan iter_properties() untuk mengenumerasi semua properti pada sebuah pesan, atau get_property_value() untuk pengambilan nilai langsung dengan dekoding tipe opsional.
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 properti kembali dari file yang 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
Tambahkan penerima dengan add_recipient(), menentukan nama tampilan dan jenis penerima (To, CC, atau BCC). Lampirkan file dengan add_attachment() menggunakan byte mentah dan tipe MIME. Untuk pesan bersarang, add_embedded_message_attachment() menyematkan MapiMessage lengkap sebagai objek anak di dalam induk.
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 pesan yang 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}")
Konversi MSG ke EmailMessage
Pustaka mengonversi dalam kedua arah antara MSG dan email.message.EmailMessage Python. Gunakan to_email_message() untuk menghasilkan objek MIME yang sesuai standar, atau from_email_message() untuk mengimpor EmailMessage yang ada ke format MSG. Metode kenyamanan to_email_bytes() dan to_email_string() menyerialkan langsung ke byte 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
Bangun dan serialize kontainer Compound File Binary secara independen dari lapisan MSG. CFBDocument.from_file() memuat kontainer yang ada ke dalam model dokumen yang dapat diubah dengan node CFBStorage dan CFBStream. CFBWriter.write_file() men‑serialize dokumen kembali ke disk 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")
Penanganan Kesalahan
Perpustakaan mengeluarkan CFBError untuk konten CFB yang rusak dan MsgError untuk struktur MSG yang tidak valid. MapiMessage juga mengekspos properti validation_issues yang mengembalikan tuple string peringatan tanpa memunculkan pengecualian, memungkinkan Anda memutuskan seberapa ketat menangani file yang tidak sesuai.
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}")
Panduan Cepat
pip install aspose-email-foss>=26.3
Muat MSG yang ada, baca metadata-nya, dan daftar 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 Didukung
| Format | Impor | Ekspor |
|---|---|---|
| MSG | Ya | Ya |
| CFB | Ya | Ya |
Sumber Terbuka & Lisensi
Aspose.Email FOSS untuk Python dirilis di bawah MIT License. Anda dapat menggunakannya dalam proyek pribadi, internal, dan komersial tanpa batasan. Kode sumber tersedia di GitHub.