Cómo analizar archivos MSG en Python

Cómo analizar archivos MSG en Python

aspose-email-foss para Python proporciona una API pure-Python para leer archivos Outlook MSG sin dependencias de Microsoft Office. Cargue un archivo en un objeto MapiMessage para acceder a todos los datos del mensaje.

Guía paso a paso

Paso 1: Instalar el paquete

pip install aspose-email-foss

Requiere Python 3.10 o posterior.


Paso 2: Importar la clase MapiMessage

from aspose.email_foss.msg import MapiMessage

Paso 3: Cargar un archivo MSG

msg = MapiMessage.from_file("message.msg")

Para un análisis indulgente de archivos con formato incorrecto, pase strict=False:

msg = MapiMessage.from_file("message.msg", strict=False)

Paso 4: Acceder a las propiedades del mensaje

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

Paso 5: Listar archivos adjuntos

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

Paso 6: Inspeccionar la estructura CFB de bajo nivel

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

Problemas comunes y soluciones

CFBError al cargar

El archivo no es un contenedor CFB válido. Verifique que sea un archivo MSG de Outlook real, no un EML.

Cuerpo está vacío pero el cuerpo HTML tiene contenido

Algunos mensajes almacenan contenido solo en HTML. Verifique msg.body_html cuando msg.body devuelva None.

Advertencias de validación

Acceda msg.validation_issues para ver una tupla de advertencias de cumplimiento para el archivo cargado.


Preguntas Frecuentes (FAQ)

¿Puedo leer archivos EML?

No directamente. La biblioteca maneja el formato MSG (CFB). Convierta el contenido EML a un objeto EmailMessage primero, luego use MapiMessage.from_email_message().

¿La carga lee todos los datos del adjunto en memoria?

No. Los metadatos del adjunto se leen bajo demanda. Utilice iter_attachments_info() para una iteración ligera.

¿Es seguro para subprocesos?

Cada instancia MapiMessage es independiente. Las lecturas concurrentes de instancias separadas son seguras.

 Español