Inleiding
Het programmatisch parseren van e-mailberichten is een veelvoorkomende eis voor datamigratie, archiveringsworkflows en compliance-tools. Outlook MSG-bestanden gebruiken het Compound File Binary (CFB) containerformaat met MAPI-eigenschappen om berichtmetadata, de inhoud van de body, ontvangers en bijlagen te coderen. Werken met dit formaat in Python heeft traditioneel ofwel commerciële bibliotheken ofwel low-level binaire manipulatie vereist.
Het aspose-email-foss pakket biedt een pure-Python, MIT-gelicentieerde bibliotheek voor het lezen, maken en converteren van Outlook MSG-bestanden. Het biedt een high-level MapiMessage API voor veelvoorkomende taken naast lower-level MsgReader toegang voor gedetailleerde inspectie van de onderliggende CFB-structuur. De bibliotheek vereist Python 3.10 of hoger en heeft geen native afhankelijkheden.
Of u nu de onderwerpregel en body wilt extraheren uit een batch gearchiveerde berichten, bijlagen wilt opsommen voor indexering, of MSG-bestanden wilt converteren naar het standaard RFC5322-formaat, deze bibliotheek verzorgt de binaire parsing zodat u zich kunt concentreren op de logica van uw applicatie.
Inbegrepen
MSG-bestanden lezen met MapiMessage
De MapiMessage klasse is het primaire toegangspunt voor het parseren van Outlook MSG-bestanden. Open een bestand, krijg toegang tot de eigenschappen, en sluit het netjes af met een contextmanager.
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}")
De from_file methode leest de CFB-container, parseert de MAPI-eigenschapstreams en vult getypeerde attributen in. De subject, body en body_html eigenschappen geven direct gedecodeerde strings terug.
Ontvangers extraheren
Elk MSG-bestand slaat ontvangerinformatie op in toegewijde MAPI-opslagplaatsen. De MapiMessage.recipients eigenschap retourneert een lijst van MapiRecipient objecten met getypeerde velden voor weergavenaam, e-mailadres en ontvangerstype (TO, CC of 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}"
)
Werken met bijlagen
De iter_attachments_info methode levert MapiAttachment objecten die de bestandsnaam, ruwe bytes, MIME-type en optionele Content-ID voor inline-afbeeldingen bieden.
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}")
Toegang tot MAPI-eigenschappen
Voor scenario’s die specifieke MAPI-eigenschapswaarden vereisen die verder gaan dan de convenience-attributen, gebruik get_property_value met een PropertyId constante. Dit biedt directe toegang tot elke eigenschap die in het MSG-bestand is opgeslagen.
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}")
Itereren over alle eigenschappen
Wanneer je elke eigenschap in een bericht moet inspecteren (voor debugging, auditing of migratie), levert de iter_properties methode MapiProperty objecten met volledige tag- en waardeninformatie.
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}"
)
MSG converteren naar EML
De to_email_message methode converteert een geparseerde MSG naar een standaard Python email.message.EmailMessage object. Vanaf daar kun je het bericht serialiseren naar RFC 5322 (EML) formaat met behulp van de standaardbibliotheek.
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)
Merk op dat EML-uitvoer de ingebouwde email module van Python gebruikt voor serialisatie. De bibliotheek behandelt de MSG-naar-MAPI-naar-EmailMessage conversie; de standaardbibliotheek behandelt het RFC 5322 wire-formaat.
Snelstart
Installeer het pakket van PyPI en parseer je eerste MSG-bestand in minder dan 20 regels:
# 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)")
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| Outlook MSG | .msg | Ja | Ja |
| Compound File Binary | .cfb | Ja | Ja |
| EML (via conversie) | .eml | Ja (via from_email_message) | Ja (via to_email_message) |
EML-ondersteuning werkt via conversie: MapiMessage.from_email_message() importeert vanuit een Python email.message.EmailMessage object, en to_email_message() exporteert terug. Directe parsing van EML-bestanden wordt niet geleverd — de standaardbibliotheek behandelt het EML-wire-formaat.
Open source & licenties
Aspose.Email FOSS voor Python wordt uitgebracht onder de MIT-licentie. Je bent vrij om de bibliotheek te gebruiken, aan te passen en te distribueren in zowel commerciële als niet-commerciële projecten. De volledige broncode is beschikbaar op GitHub.
De bibliotheek is een pure-Python implementatie zonder gecompileerde extensies of native afhankelijkheden. Hij draait op elk platform dat Python 3.10 of hoger ondersteunt.
Aan de slag
Verken meer bronnen voor het werken met Aspose.Email FOSS voor Python:
- Developer Guide — volledige documentatie met tutorials en API walkthroughs
- Knowledge Base — how-to-artikelen en veelgestelde vragen
- API Reference — volledige klasse- en methodereferentie