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-fossRequiere Python 3.10 o posterior.
Paso 2: Importar la clase MapiMessage
from aspose.email_foss.msg import MapiMessagePaso 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.