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àgina | Extensió | 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.