Introduction

Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and Convertir les fichiers de message compatibles avec Outlook en Python pur. Disponible sur PyPI comme aspose-email-foss,Il fonctionne sur Windows, macOS, Linux, Docker et environnements sans serveur. Aucune dépendance Microsoft Office et aucun temps de fonctionnement propriétaire.

La bibliothèque couvre deux domaines majeurs : une couche MAPI de haut niveau (MapiMessagePour travailler avec des sujets, corps, destinataires et annexes de message ; et un niveau structurel bas La couche (MsgReader, CFBReader, CFBStorage, CFBStreamqui expose le composé brut Contenteurs binaires qui supportent chaque .msg fichier .

Cet article passe par les fonctionnalités clés envoyées dans la version 26.3, fondée sur la surface API confirmée.


Fonctionnalités clés

Création de messages à haut niveau avec MapiMessage

MapiMessage est le point d’entrée principal pour créer des messages compatibles avec Outlook de Coup de téléphone.Call MapiMessage.create() avec un sujet et un corps, ajouter des destinataires et les échanges, puis enregistrer directement à un .msg fichier .

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

Lire et vérifier les fichiers MSG

MsgReader Il permet un accès structuré à une .msg Fiche sans le chargement complet dans A MapiMessage.Il expose les entrées de propriété de haut niveau, les stockages des destinataires et les attachements sont stockés individuellement, ce qui le rend pratique pour l’inspection de fichiers grand et Validation des pipelines.

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 : chargement, modification et sauvegarde

Parce que MapiMessage soutien from_file() Pour le chargement et save() Pour écrire, un tout complet Le cycle de lecture-modification-écriture ne nécessite que quelques lignes. propriétés nommées, enums typés et Unicode de la gestion des lignes sont disponibles à travers set_property, PropertyId,et 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 Conversion

MapiMessage.to_email_message() Convertir un MSG chargé en Python standard email.message.EmailMessage Objet, permettant l’exportation vers RFC 5322 .eml Format utilisé La bibliothèque est la direction inverse (MapiMessage.from_email_message()• Construction A MapiMessage d’une 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 Containers de transport

Chaque .msg Le fichier est un conteneur de fichiers binaires (CFB). CFBReader Fournir Lire seulement l’accès à l’arbre de directory, vous laissez enregistrer les stockages et les courants, marcher sur le hiérarchie, et extraire les bytes de courant brut — sans compter sur 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}]")

Traitement de l’attachement

Les accessoires sont ajoutés par MapiMessage.add_attachment() (pour les données binaires) ou MapiMessage.add_embedded_message_attachment() (pour les messages MSG nés) Les deux méthodes Accepter un nom de fichier, des bytes crus et un type MIME facultatif.

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

Démarrage rapide

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)

Formats soutenus

FormatsExtensionLireÉcrire
Composé de fichier binaire.cfb
Message Outlook.msg
EML / RFC 5322.eml

Source ouverte et licence

Aspose.Email FOSS for Python is released under the MIT License. The source repository is Disponible à Github.com/envoyez-nous par mail et le Le package est publié sur PyPI comme aspose-email-foss.utilisation commerciale, modification et La redistribution est autorisée dans les termes du MIT.


Pour commencer

Ressources associées