Come analizzare i file MSG in Python

Come analizzare i file MSG in Python

aspose-email-foss per Python fornisce un’API pure-Python per la lettura dei file Outlook MSG senza dipendenze da Microsoft Office. Carica un file in un oggetto MapiMessage per accedere a tutti i dati del messaggio.

Guida passo-passo

Passo 1: Installa il pacchetto

pip install aspose-email-foss

Richiede Python 3.10 o versioni successive.


Passo 2: Importa la classe MapiMessage

from aspose.email_foss.msg import MapiMessage

Passo 3: Carica un file MSG

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

Per l’analisi permissiva di file malformati, passa strict=False:

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

Passo 4: Accedi alle proprietà del messaggio

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}")

Passo 5: Elenca gli allegati

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

Passo 6: Ispeziona la struttura CFB a basso livello

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()

Problemi comuni e soluzioni

CFBError durante il caricamento

Il file non è un contenitore CFB valido. Verifica che sia un file Outlook MSG reale, non un EML.

Body è vuoto ma HTML body ha contenuto

Alcuni messaggi memorizzano il contenuto solo in HTML. Controlla msg.body_html quando msg.body restituisce None.

Avvisi di convalida

Accedi msg.validation_issues per vedere una tupla di avvisi di conformità per il file caricato.


Domande Frequenti (FAQ)

Posso leggere i file EML?

Non direttamente. La libreria gestisce il formato MSG (CFB). Converti il contenuto EML in un oggetto EmailMessage prima, quindi usa MapiMessage.from_email_message().

Il caricamento legge tutti i dati dell’allegato in memoria?

No. I metadati dell’allegato vengono letti su richiesta. Usa iter_attachments_info() per un’iterazione leggera.

È thread‑safe?

Ogni istanza MapiMessage è indipendente. Le letture concorrenti da istanze separate sono sicure.

 Italiano