Introducción
Aspose.Email FOSS for Python is a free, MIT-licensed library for creating, reading, and Convertir archivos de mensaje compatibles con Outlook en Python puro. Disponible en PYPI como aspose-email-foss, funciona en Windows, macOS, Linux, Docker y ambientes sin servidor No hay dependencia de Microsoft Office ni tiempo de trabajo propiedad.
La biblioteca cubre dos áreas principales: una capa de alto nivel MAPI (MapiMessagePara trabajar con los sujetos de mensaje, cuerpos, destinatarios y anexos; y una estructura de bajo nivel. El Cuerpo (MsgReader, CFBReader, CFBStorage, CFBStreamque exponen el compuesto crudo Contenedores binarios que subordinan a todos los archivos .msg El archivo.
Este artículo se extiende por las características clave enviadas en la versión 26.3, basada en el nivel de API confirmado.
Características clave
Creación de mensajes de alto nivel con MapiMessage
MapiMessage es el punto de entrada principal para crear mensajes compatibles con Outlook desde Cálculo - Call MapiMessage.create() con un sujeto y cuerpo, añade destinatarios y los ingresos, y luego guardar directamente a la .msg El archivo.
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")
Leer y inspeccionar los archivos de MSG
MsgReader proporciona un acceso estructurado a una .msg El archivo sin cargarlo completamente. En el A MapiMessage.Exponer entradas de propiedad de alto nivel, almacenes de destinatarios y almacenan los adhesivos individualmente, lo que hace práctico para la inspección de archivos grandes y Validación de los tubos.
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: Cargar, Modificar y Salvar
Porque MapiMessage Apoyo from_file() Para la carga y save() Para escribir, una completa El ciclo de lectura-modificación-escritura requiere sólo unas pocas líneas. propiedades nombradas, enumeras tipificadas y Unicode en el control de la línea está disponible a través de set_property, PropertyId,y, 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ón
MapiMessage.to_email_message() Convertir un MSG cargado en Python estándar email.message.EmailMessage objeto, que permite la exportación a RFC 5322 .eml Formato de uso La dirección inversa (MapiMessage.from_email_message()Construcciones a MapiMessage Desde 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")
CFC Contenedores de Transporte
Cada uno .msg El archivo es un contenedor de archivos binarios (CFB). CFBReader proporciona acceso solo a la árbol de directorio, permitiéndole listar almacenes y corrientes, pase el hierarquía, y extraer bajetas de corriente cruda — sin confiar en la 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}]")
Tratamiento de adhesión
Los accesorios se añaden a través de MapiMessage.add_attachment() (en caso de datos binarios) o MapiMessage.add_embedded_message_attachment() (para mensajes de MSG) Ambas formas aceptar un nombre de archivo, bajos crudos y un tipo 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")
Inicio rápido
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)
Formatos apoyados
| Formato | Extensiones | Leer | Escribe |
|---|---|---|---|
| Composición de archivos binarios | .cfb | ✓ | ✓ |
| mensaje de Outlook | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
Open Source y Licenciación
Aspose.Email FOSS for Python is released under the MIT License. The source repository is Disponible en GitHub.com/aspose-email-foss en la página web de los usuarios Y el El paquete se publica en PyPI como aspose-email-foss.uso comercial, modificación y La redistribución está permitida bajo los términos del MIT.