Introduzione
L’analisi dei messaggi email in modo programmatico è una necessità comune per la migrazione dei dati, i flussi di lavoro di archiviazione e gli strumenti di conformità. I file Outlook MSG utilizzano il formato container Compound File Binary (CFB) con le proprietà MAPI per codificare i metadati del messaggio, il contenuto del corpo, i destinatari e gli allegati. Lavorare con questo formato in Python ha tradizionalmente richiesto librerie commerciali o manipolazioni binarie a basso livello.
Il pacchetto aspose-email-foss fornisce una libreria pure-Python, rilasciata sotto licenza MIT, per leggere, creare e convertire file Outlook MSG. Espone un MapiMessage API di alto livello per le operazioni comuni, insieme a un accesso MsgReader di livello inferiore per l’ispezione dettagliata della struttura CFB sottostante. La libreria richiede Python 3.10 o successivo e non ha dipendenze native.
Che tu debba estrarre l’oggetto e il corpo da un batch di messaggi archiviati, elencare gli allegati per l’indicizzazione, o convertire i file MSG nel formato standard RFC 5322, questa libreria gestisce l’analisi binaria così puoi concentrarti sulla logica della tua applicazione.
Cosa è incluso
Lettura dei file MSG con MapiMessage
La classe MapiMessage è il punto di ingresso principale per l’analisi dei file Outlook MSG. Apri un file, accedi alle sue proprietà e chiudilo correttamente con un context manager.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("meeting-invite.msg") as message:
print(f"Subject: {message.subject}")
print(f"Body: {message.body[:200]}")
print(f"HTML body available: {message.body_html is not None}")
Il metodo from_file legge il contenitore CFB, analizza i flussi di proprietà MAPI e popola gli attributi tipizzati. Le proprietà subject, body e body_html restituiscono direttamente le stringhe decodificate.
Estrazione dei destinatari
Ogni file MSG memorizza le informazioni sui destinatari in archivi MAPI dedicati. La proprietà MapiMessage.recipients restituisce un elenco di oggetti MapiRecipient con campi tipizzati per nome visualizzato, indirizzo email e tipo di destinatario (TO, CC o BCC).
from aspose.email_foss import msg
with msg.MapiMessage.from_file("team-update.msg") as message:
for recipient in message.recipients:
print(
f"{recipient.display_name} <{recipient.email_address}> "
f"type={recipient.recipient_type}"
)
Lavorare con gli allegati
Il metodo iter_attachments_info restituisce oggetti MapiAttachment che forniscono il nome file, i byte grezzi, il tipo MIME e, facoltativamente, il Content-ID per le immagini inline.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("report.msg") as message:
for att in message.iter_attachments_info():
print(f" {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
if att.content_id:
print(f" inline content-id: {att.content_id}")
Accesso alle proprietà MAPI
Per scenari che richiedono valori specifici delle proprietà MAPI oltre agli attributi di comodità, usa get_property_value con una costante PropertyId. Questo fornisce accesso diretto a qualsiasi proprietà memorizzata nel file MSG.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("notification.msg") as message:
sender = message.get_property_value(msg.PropertyId.SENDER_NAME)
email = message.get_property_value(msg.PropertyId.SENDER_EMAIL_ADDRESS)
delivery = message.get_property_value(msg.PropertyId.MESSAGE_DELIVERY_TIME)
print(f"From: {sender} <{email}>")
print(f"Delivered: {delivery}")
Iterazione di tutte le proprietà
Quando è necessario ispezionare ogni proprietà in un messaggio (per il debug, l’audit o la migrazione), il metodo iter_properties restituisce oggetti MapiProperty con informazioni complete di tag e valore.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("sample.msg") as message:
for prop in message.iter_properties():
print(
f"tag=0x{prop.property_tag:08X} "
f"type=0x{prop.property_type:04X} "
f"value={prop.value!r}"
)
Conversione da MSG a EML
Il metodo to_email_message converte un MSG analizzato in un oggetto standard Python email.message.EmailMessage. Da lì è possibile serializzare il messaggio nel formato RFC 5322 (EML) utilizzando la libreria standard.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("archive.msg") as message:
email_message = message.to_email_message()
eml_bytes = email_message.as_bytes()
with open("archive.eml", "wb") as f:
f.write(eml_bytes)
Nota che l’output EML utilizza il modulo integrato email di Python per la serializzazione. La libreria gestisce la conversione da MSG a MAPI a EmailMessage; la libreria standard gestisce il formato di rete RFC 5322.
Avvio rapido
Installa il pacchetto da PyPI e analizza il tuo primo file MSG in meno di 20 righe:
# Install: pip install aspose-email-foss>=26.3
from aspose.email_foss import msg
# Create a new message
message = msg.MapiMessage.create(
"Project status update",
"Hello team,\n\nPlease review the attached report.\n\nRegards",
)
message.add_recipient("alice@example.com", display_name="Alice")
message.add_attachment("notes.txt", b"meeting notes\n", mime_type="text/plain")
message.save("status-update.msg")
# Read it back and extract data
with msg.MapiMessage.from_file("status-update.msg") as loaded:
print(f"Subject: {loaded.subject}")
print(f"Recipients: {len(loaded.recipients)}")
for att in loaded.iter_attachments_info():
print(f"Attachment: {att.filename} ({len(att.data)} bytes)")
Formati supportati
| Formato | Estensione | Leggi | Scrivi |
|---|---|---|---|
| Outlook MSG | .msg | Sì | Sì |
| Compound File Binary | .cfb | Sì | Sì |
| EML (tramite conversione) | .eml | Sì (tramite from_email_message) | Sì (tramite to_email_message) |
Il supporto EML funziona tramite conversione: MapiMessage.from_email_message() importa da un oggetto Python email.message.EmailMessage, e to_email_message() esporta nuovamente. L’analisi diretta di file EML non è fornita — la libreria standard gestisce il formato di rete EML.
Open Source e Licenze
Aspose.Email FOSS per Python è rilasciato sotto licenza MIT. Sei libero di usare, modificare e distribuire la libreria sia in progetti commerciali sia non commerciali. Il codice sorgente completo è disponibile su GitHub.
La libreria è un’implementazione pure-Python senza estensioni compilate o dipendenze native. Funziona su qualsiasi piattaforma che supporta Python 3.10 o versioni successive.
Iniziare
Esplora altre risorse per lavorare con Aspose.Email FOSS per Python:
- Developer Guide — documentazione completa con tutorial e walkthrough di API
- Knowledge Base — articoli pratici e domande frequenti
- API Reference — riferimento completo di classi e metodi