Pengantar
Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and Konversi file pesan yang kompatibel dengan Outlook dalam Python murni. Tersedia di PyPI sebagai aspose-email-foss, bekerja pada Windows, macOS, Linux, Docker dan lingkungan tanpa server. tanpa ketergantungan Microsoft Office dan tidak ada runtime proprietary.
Perpustakaan ini mencakup dua bidang utama: lapisan MAPI tingkat tinggi (MapiMessage) untuk bekerja dengan subjek pesan, badan, penerima dan lampiran; dan tingkat struktural rendah yang lapisan (MsgReader, CFBReader, CFBStorage, CFBStream) yang mengekspos senyawa mentah. Kontainer binari yang mendukung setiap file. .msg File. - Apa?.
Artikel ini berjalan melalui fitur-fitur utama yang dikirimkan dalam versi 26.3, berbasis pada permukaan API yang dikonfirmasi.
Fitur Utama
Penciptaan Pesan Tingkat Tinggi dengan MapiMessage
MapiMessage adalah titik masuk utama untuk membuat pesan yang kompatibel dengan Outlook dari Panggil aku. MapiMessage.create() dengan subjek dan tubuh, tambahkan penerima dan dan kemudian langsung ke dalam sebuah .msg File. - Apa?.
from aspose.email_foss import msg
message = msg.MapiMessage.create(
"Quarterly status update",
"Hello team,\n\nPlease review the attached summary.\n\nRegards,\nEngineering",
)
message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "agent@example.com")
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_attachment("report.txt", b"Summary content here.\n", mime_type="text/plain")
message.save("output.msg")
Membaca dan Memeriksa File MSG
MsgReader memberikan akses terstruktur ke sistem yang ada. .msg file tanpa memuat sepenuhnya menjadi sebuah MapiMessage.Ini mengungkapkan entri properti tingkat atas, penyimpanan penerima dan penyimpanan lampiran secara individual, membuatnya praktis untuk pemeriksaan berformat besar dan pipa validasi.
from aspose.email_foss import msg
with msg.MsgReader.from_file("output.msg") as reader:
header = reader.top_level_header
print(f"Recipients : {header.recipient_count}")
print(f"Attachments: {header.attachment_count}")
for entry in reader.iter_recipient_storages():
_, props = reader.parse_subobject_property_stream(entry.stream_id)
print(f" Recipient storage {entry.name}: {len(props)} property entries")
MSG Round-Trip: Load, Modify, Save (Pengisian, Mengubah dan Menyimpan)
Karena… MapiMessage dukungan from_file() untuk pengisian dan save() untuk menulis, penuh siklus read-modify-write hanya membutuhkan beberapa baris. Properties yang diberi nama, enum yang diketikkan, dan Penanganan string Unicode tersedia melalui set_property, PropertyId, dan MapiNamedProperty.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("original.msg") as message:
message.set_property(msg.PropertyId.SUBJECT, "Updated Subject")
message.save("updated.msg")
Konversi EML / RFC 5322
MapiMessage.to_email_message() mengubah MSG yang dimuat menjadi Python standar email.message.EmailMessage objek, memungkinkan ekspor ke RFC 5322 .eml format menggunakan perpustakaan standar. arah kebalik (MapiMessage.from_email_message()) membangun a. tidak ada MapiMessage dari sebuah EmailMessage.
from pathlib import Path
from aspose.email_foss import msg
with msg.MapiMessage.from_file("message.msg") as message:
eml_bytes = message.to_email_bytes()
Path("message.eml").write_bytes(eml_bytes)
# Reverse: load EML into MapiMessage
import email
raw_eml = Path("message.eml").read_bytes()
email_obj = email.message_from_bytes(raw_eml)
mapi = msg.MapiMessage.from_email_message(email_obj)
mapi.save("from_eml.msg")
CFB Container Traversal (Pelayaran Konten)
Setiap .msg file adalah kontainer Compound File Binary (CFB). CFBReader menyediakan akses baca-hanya ke pohon direktori, memungkinkan Anda daftar penyimpanan dan aliran, berjalan di hierarki, dan ekstrak byte aliran mentah tanpa mengandalkan MsgReader.
from aspose.email_foss.cfb import CFBReader
with CFBReader.from_file("message.msg") as reader:
print(f"CFB version : {reader.major_version}")
print(f"Sector size : {reader.sector_size}")
for depth, entry in reader.iter_tree():
indent = " " * depth
size = entry.stream_size if entry.is_stream() else "-"
print(f"{indent}{entry.name} [size={size}]")
Penanganan lampiran
Lampiran ditambahkan melalui: MapiMessage.add_attachment() (untuk data biner) atau MapiMessage.add_embedded_message_attachment() (untuk pesan MSG yang tertanam). Kedua metode ini menerima file name, byte mentah, dan tipe MIME opsional.
from aspose.email_foss import msg
message = msg.MapiMessage.create("Attachment demo", "See files below.")
message.add_attachment("data.csv", b"id,value\n1,100\n", mime_type="text/csv")
inner = msg.MapiMessage.create("Nested message", "This is embedded.")
message.add_embedded_message_attachment(inner, "nested.msg")
message.save("with_attachments.msg")
Memulai dengan cepat
pip install aspose-email-fossfrom aspose.email_foss import msg
# Create and save a minimal MSG
message = msg.MapiMessage.create("Hello World", "This is a test message.")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "sender@example.com")
message.add_recipient("recipient@example.com", display_name="Recipient")
message.save("hello.msg")
# Load it back and convert to EML
with msg.MapiMessage.from_file("hello.msg") as loaded:
print(loaded.get_property_value(msg.PropertyId.SUBJECT))
eml = loaded.to_email_bytes()
open("hello.eml", "wb").write(eml)
Format yang Didhukung
| Format (Inggris) | Perpanjangan | Bacalah. | Menulis |
|---|---|---|---|
| Komposisi File Binary | .cfb | ✓ | ✓ |
| Pesan Outlook | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
Open Source & Lisensi
Aspose.Email FOSS for Python is released under the MIT License. The source repository is tersedia di: Github.com/aspose-email-foss (dalam bahasa Inggris) dan yang paket dipublikasikan di PyPI sebagai: aspose-email-foss.Penggunaan komersial, modifikasi dan redistribusi semua diizinkan berdasarkan MIT syarat.