Introducció

Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and conversió de fitxers de missatges compatibles amb Outlook en Python pur. Disponible a PyPI com aspose-email-foss, funciona en Windows, macOS, Linux, Docker i entorns sense servidors. sense dependència de Microsoft Office i sense temps d’execució propietari.

La biblioteca abasta dues àrees principals: una capa MAPI de nivell alt (MapiMessage) per treballar amb temes de missatges, cossos, destinataris i apanyaments; i un nivell estructural baix. cap (MsgReader, CFBReader, CFBStorage, CFBStream) que exposa el compost brut. Contenidors binaris de fitxer que sostenen cada .msg Arxiu.

Aquest article explica les característiques clau enviades en la versió 26.3, basat en l’API confirmada.


Característiques clau

Creació de missatges d’alt nivell amb MapiMessage

MapiMessage és el punt d’entrada principal per crear missatges compatibles amb Outlook des de: - Lliga. MapiMessage.create() amb un tema i cos, afegir destinataris i les instal·lacions, després guardar directament a un .msg Arxiu.

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

Llegir i inspeccionar arxius de MSG

MsgReader proporciona accés estructurat a una plataforma existent de comunicació i informació. .msg arxiu sense carregar-lo completament. en un MapiMessage.Exposeix entrades de propietats d’alt nivell, emmagatzematges dels destinataris i l’equipament de la central d’informació, que permet realitzar inspeccions i controls en gran quantitat. conductes de validació.

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: Carrega, modifica i guarda

Perquè… MapiMessage suportes from_file() per a la càrrega i save() per a l’escriptura, un full de el cicle de lectura-modificació-escriptura requereix només unes poques línies. Propietats nomenades, enums digitats i El tractament de cadenes d’Unicode estan disponibles a través del set_property, PropertyId, i 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 Conversió

MapiMessage.to_email_message() converteix un MSG carregat en Python estàndard. email.message.EmailMessage object, que permet l’exportació a RFC 5322 .eml format utilitzant La biblioteca estàndard.MapiMessage.from_email_message()) construeix a) MapiMessage de un 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")

Traversal de contenidors CFB

Cada .msg file és un contenidor de Compound File Binary (CFB). CFBReader proporciona: accés de només lectura a l’arbre d’annals, permetent-li que enumere els emmagatzematges i les corrents, caminar el la jerarquia, i extraure bits de flux brut sense dependre del 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}]")

Màndala de fixació

Els apanyats s’afegeixen a través de: MapiMessage.add_attachment() (per a dades binàries) o MapiMessage.add_embedded_message_attachment() (per a missatges enredats de MSG). acceptar un nom de fitxer, bytes brut i un tipus MIME opcional.

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

Inici ràpid

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

Formats suportats

Format de la pàginaExtensióLlegeix.Escriure
Arxiu binari compost.cfb
Mensaig d’ Outlook.msg
EML / RFC 5322.eml

Fonte oberta i llicències

Aspose.Email FOSS for Python is released under the MIT License. The source repository is disponible a: github.com/aspose-email-foss i el El paquet s’ha publicat en PyPI com a: aspose-email-foss.Utilització comercial, modificació i La redistribució està permesa sota els termes del MIT.


Com començar a treballar