Giriş

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.

Konteyner seviyesinde, CFB okuyucu ve yazıcı size Compound File Binary belgeleri üzerinde deterministik kontrol sağlar. Depolama hiyerarşilerini gezebilir, ham akış verilerini çıkarabilir, sıfırdan yeni konteynerler oluşturabilir ve bunları baytlara serileştirebilirsiniz. Her ikisi de CFBError ve MsgError hatalı giriş için yapılandırılmış istisna işleme sağlar.

Bu gönderi, kütüphanenin kendi test paketinden ve örnek betiklerinden doğrudan alınan doğrulanmış kod örnekleriyle her özelliği adım adım inceler.


Neler Dahildir

MAPI Özellik Erişimi

Her MSG dosyası MAPI özellikleri üzerine inşa edilmiştir. MapiMessage açığa çıkarır set_property() ve get_property() özelliklerle onların PropertyId enum değeriyle çalışmak için. Kullan iter_properties() bir mesajdaki tüm özellikleri numaralandırmak için, ya da get_property_value() isteğe bağlı tip çözümlemesiyle doğrudan değer alımı için.

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

Mevcut bir dosyadan özellikleri geri okumak için:

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

Alıcılar ve Ekler

Alıcıları ekleyin add_recipient(), görüntülenen adı ve alıcı tipini (To, CC veya BCC) belirterek. add_attachment() Dosyaları ekleyin, add_embedded_message_attachment() ham baytlar ve bir MIME türü kullanarak. İç içe mesajlar için, MapiMessage tam bir.

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

Mevcut bir mesajdaki ekleri incelemek için:

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’den EmailMessage’a Dönüşüm

ebeveyn içinde bir alt nesne olarak gömer. Kütüphane, MSG ve Python’s arasında iki yönlü dönüşüm yapar. email.message.EmailMessage. Kullan to_email_message() standartlara uygun bir MIME nesnesi üretmek için, ya da from_email_message() varolan birini EmailMessage MSG formatına. Kullanım kolaylığı sağlayan yöntemler to_email_bytes() ve to_email_string() doğrudan baytlara veya metne serileştirir.

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 Konteyner Döngüsel İşlem

Compound File Binary kapsayıcılarını MSG katmanından bağımsız olarak oluşturur ve serileştirir. CFBDocument.from_file() var olan bir kapsayıcıyı değiştirilebilir bir belge modeline yükler ve CFBStorage ve CFBStream düğümler. CFBWriter.write_file() belgeyi diske deterministik bir şekilde serileştirir.

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

Hata Yönetimi

Kütüphane şunu fırlatır CFBError bozuk CFB içeriği için ve MsgError geçersiz MSG yapısı için. MapiMessage aynı zamanda bir validation_issues özelliği, bir istisna fırlatmadan uyarı dizesi içeren bir demet döndürür; böylece uyumsuz dosyaları ne kadar katı bir şekilde ele alacağınızı siz belirleyebilirsiniz.

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

Hızlı Başlangıç

pip install aspose-email-foss>=26.3

Mevcut bir MSG dosyasını yükleyin, meta verilerini okuyun ve ekleri listeleyin:

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

Desteklenen Biçimler

Biçimİçe AktarDışa Aktar
MSGEvetEvet
CFBEvetEvet

Açık Kaynak & Lisanslama

Aspose.Email FOSS for Python is released under the MIT License. Kişisel, dahili ve ticari projelerde kısıtlama olmadan kullanabilirsiniz. Kaynak kodu şu adreste mevcuttur GitHub.


Başlarken