Einführung
Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and Konvertieren von Outlook-kompatiblen Nachrichtendateien in reiner Python. Erhältlich auf PyPI als aspose-email-foss, es funktioniert auf Windows, macOS, Linux, Docker und serverlosen Umgebungen. ohne Microsoft Office-Abhängigkeit und keine proprietäre Laufzeit.
Die Bibliothek umfasst zwei Hauptbereiche: eine hochrangige MAPI-Schicht (MapiMessage) für die Arbeit Die Veröffentlichung der Nachrichten wird durch die Einführung von Informationen über den Inhalt und das Ziel des Textes erfolgen. Schicht (MsgReader, CFBReader, CFBStorage, CFBStream) die den Rohstoff auslöst. Datei Binärcontainer, die alle .msg Die Akte.
Dieser Artikel führt die wichtigsten Funktionen durch, die in Version 26.3 geliefert wurden. Sie basieren auf der bestätigten API-Oberfläche.
Hauptmerkmale
Nachrichten auf hoher Ebene mit MapiMessage erstellen
MapiMessage ist der primäre Einstiegspunkt für die Erstellung von Outlook-kompatiblen Nachrichten aus dem - Ich hab dich angerufen. MapiMessage.create() mit einem Thema und Körper, fügen Sie Empfänger hinzu und Anlagen, dann direkt an eine .msg Die Akte.
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")
MSG-Dateien lesen und prüfen
MsgReader Die Kommission hat die Möglichkeit, den Zugang zu einer bestehenden .msg Datei ohne vollständiges Laden in eine MapiMessage.Die Veröffentlichung der Daten über die im Rahmen des Programms durchgeführten Ermittlungen ist nicht unerläßlich. Einige der folgenden Faktoren sind jedoch nicht berücksichtigt: Validierungspipelines.
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-Rundfahrt: Laden, Modifizieren und Speichern
Weil … MapiMessage Stützungen from_file() für das Verladen und save() für das Schreiben, eine vollständige Der read-modify-write Zyklus erfordert nur wenige Zeilen. benannte Eigenschaften, eingetippte Enums und Unicode-Stringbehandlung ist über die set_property, PropertyId,und . 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 Umwandlung
MapiMessage.to_email_message() konvertiert ein geladenes MSG in einen Standard-Python. email.message.EmailMessage Objekt, das den Export nach RFC 5322 ermöglicht .eml Format mit Die Umkehrung der Richtung (MapiMessage.from_email_message()) Konstrukte a) die MapiMessage von einem 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überfahrt
Jeder .msg Die Datenbank ist ein Compound File Binary (CFB) -Container. CFBReader stellt vor, Lesen-nur Zugriff auf den Verzeichnisbaum, so dass Sie Speicher und Streams Liste, gehen die Hierarchie und extrahieren Rohstrom-Bytes ohne sich auf die 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}]")
Bearbeitung der Anlage
Anlagen werden über die MapiMessage.add_attachment() (für binäre Daten) oder MapiMessage.add_embedded_message_attachment() (für verschachtelte MSG-Nachrichten). Beide Methoden werden in der Regel von den verschiedenen Akzeptieren Sie einen Dateinamen, Rohbyte und einen optionalen MIME-Typ.
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")
Schneller Start
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)
Unterstützte Formate
| Format der Datenbank | Erweiterung | Lesen Sie . | Schreiben . |
|---|---|---|---|
| Binäre Datei mit Kompound-Dateien | .cfb | ✓ | ✓ |
| Outlook-Nachricht | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
Open Source und Lizenzierung
Aspose.Email FOSS for Python is released under the MIT License. The source repository is verfügbar unter: Github.com/aspose-email-foss (auch als Webseite) und die Das Paket wird auf PyPI als: aspose-email-foss. Kommerzielle Verwendung, Änderung und Die Umverteilung ist unter den MIT-Bedingungen gestattet.