Úvodní článek

Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and konverze souborů s Outlookem kompatibilních zpráv v čistém Pythonu. Dostupné na PyPI jako aspose-email-foss, funguje na Windows, macOS, Linuxu, Docker a bezserverových prostředích. bez závislosti na Microsoft Office a bez vlastního runtime.

Knihovna pokrývá dvě hlavní oblasti: vrstvu MAPI na vysoké úrovni (MapiMessage) pro práci s předměty, tělesami, příjemci a přílohy zpráv; a nízkonastorovou strukturální analýzou. vrstva (MsgReader, CFBReader, CFBStorage, CFBStream) které vystavuje surovou sloučeninu. Soubory binární kontejnery, které podporují každý soubor. .msg - Soubor.

Tento článek prochází klíčovými funkcemi dodanými ve verzi 26.3, založenou na potvrzeném povrchu API.


Klíčové prvky

Vytvoření vzkazů na vysoké úrovni pomocí MapiMessage

MapiMessage je primární vstupní bod pro vytváření zpráv kompatibilních s Outlookem ze systému Zavolej. MapiMessage.create() s předmětem a tělem, přidejte příjemce a Přílohy, pak se uloží přímo na .msg - Soubor.

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

Čtení a kontrola souborů MSG

MsgReader poskytuje strukturovaný přístup k existujícímu systému sítě, který je v současnosti dostupný na internetových stránkách. .msg soubor bez úplného načtení. do výše uvedených bodů: MapiMessage.Vystavuje záznamy o nejvyšších úrovních majetku, ukládání příjemců a souborové skladování jednotlivé, což je praktické pro velké inspekce a validační potrubí.

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: Naložit, změnit a ušetřit

Protože… MapiMessage podložky from_file() pro nakládku a save() pro psaní, plné read-modify-write cyklus vyžaduje jen několik řádků. jmenované vlastnosti, zadané enumy a Unicode řetězové manipulace jsou k dispozici prostřednictvím set_property, PropertyId,a) 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")

EML / RFC 5322 Konverze

MapiMessage.to_email_message() přeměňuje nabitý MSG do standardního Pythonu. email.message.EmailMessage objekt, který umožňuje export do RFC 5322 .eml formát pomocí V opačném směru (MapiMessage.from_email_message()) konstrukce a) MapiMessage z roku 2000 do roku 2006 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")

Procházení kontejnerů CFB

Každý. .msg soubor je kontejner pro složité binární soubory (CFB). CFBReader poskytuje: read-only přístup k stromku adresářů, což vám umožní seznam ukládání a toky, procházka po hierarchii a extrahovat surové byty toku bez spoléhání se na 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}]")

Zpracování připojených položek

Přílohy jsou přidávány prostřednictvím: MapiMessage.add_attachment() (pro binární data) nebo MapiMessage.add_embedded_message_attachment() (pro vnitřní zprávy MSG). přijímá jméno souboru, surové bajty a volitelný typ MIME.

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

Rychlý start

pip install aspose-email-foss
from 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)

Podporované formáty

FormátRozšířeníČtěte.Píšeš.
Binární soubor složeného souboru.cfb
Sdělení Outlook.msg
EML / RFC 5322.eml

Open Source & Licence

Aspose.Email FOSS for Python is released under the MIT License. The source repository is k dispozici na: Github.com/aspose-email-foss (v angličtině) a Zásada se zveřejňuje na PyPI jako: aspose-email-foss. Komerční použití, úprava a Přerozdělování je povoleno podle podmínek MIT.


Jak začít?