Introduktion
Att programatiskt parsa e-postmeddelanden är ett vanligt krav för datamigrering, arkiveringsarbetsflöden och efterlevnadsverktyg. Outlook-MSG-filer använder Compound File Binary (CFB)-behållarformatet med MAPI-egenskaper för att koda meddelandemetadata, brödtext, mottagare och bilagor. Att arbeta med detta format i Python har traditionellt krävt antingen kommersiella bibliotek eller låg-nivå binärmanipulation.
Paketet aspose-email-foss tillhandahåller ett rent Python-bibliotek, licensierat under MIT, för att läsa, skapa och konvertera Outlook-MSG-filer. Det erbjuder ett hög nivå MapiMessage API för vanliga uppgifter samt lägre nivå MsgReader-åtkomst för detaljerad inspektion av den underliggande CFB-strukturen. Biblioteket kräver Python 3.10 eller senare och har inga inhemska beroenden.
Oavsett om du behöver extrahera ämnesraden och brödtexten från en batch av arkiverade meddelanden, lista bilagor för indexering, eller konvertera MSG-filer till standard-RFC 5322-format, så hanterar detta bibliotek den binära parsingen så att du kan fokusera på din applikationslogik.
Vad som ingår
Läsa MSG-filer med MapiMessage
MapiMessage-klassen är den primära ingångspunkten för att parsa Outlook-MSG-filer. Öppna en fil, åtkomst dess egenskaper och stäng den på ett rent sätt med en kontext-hanterare.
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}")
Metoden from_file läser CFB-behållaren, analyserar MAPI-egenskapsströmmarna och fyller i typade attribut. Egenskaperna subject, body och body_html returnerar avkodade strängar direkt.
Extrahera mottagare
Varje MSG-fil lagrar mottagarinformation i dedikerade MAPI-lagringar. Egenskapen MapiMessage.recipients returnerar en lista med MapiRecipient-objekt med typade fält för visningsnamn, e-postadress och mottagartyp (TO, CC eller 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}"
)
Arbeta med bilagor
Metoden iter_attachments_info returnerar MapiAttachment-objekt som tillhandahåller filnamnet, råa byte, MIME-typ och valfritt Content-ID för inbäddade bilder.
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}")
Åtkomst till MAPI-egenskaper
För scenarier som kräver specifika MAPI-egenskapsvärden utöver bekvämlighetsattributen, använd get_property_value med en PropertyId-konstant. Detta ger direkt åtkomst till alla egenskaper som lagras i MSG-filen.
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}")
Iterera över alla egenskaper
När du behöver inspektera varje egenskap i ett meddelande (för felsökning, granskning eller migrering) ger metoden iter_properties MapiProperty-objekt med fullständig tagg- och värdeinformation.
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}"
)
Konvertera MSG till EML
Metoden to_email_message konverterar ett parsat MSG till ett standard Python email.message.EmailMessage-objekt. Därefter kan du serialisera meddelandet till RFC 5322 (EML)-formatet med standardbiblioteket.
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)
Observera att EML-utdata använder Python s inbyggda email-modul för serialisering. Biblioteket hanterar konverteringen MSG-till-MAPI-till-EmailMessage; standardbiblioteket hanterar RFC 5322-trådnformatet.
Snabbstart
Installera paketet från PyPI och analysera din första MSG-fil på under 20 rader:
# 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)")
Stödda format
| Format | Filändelse | Läs | Skriv |
|---|---|---|---|
| Outlook MSG | .msg | Ja | Ja |
| Compound File Binary | .cfb | Ja | Ja |
| EML (via konvertering) | .eml | Ja (via from_email_message) | Ja (via to_email_message) |
EML-stöd fungerar via konvertering: MapiMessage.from_email_message() importerar från ett Python email.message.EmailMessage-objekt, och to_email_message() exporterar tillbaka. Direkt parsning av EML-filer tillhandahålls inte — standardbiblioteket hanterar EML-trådnformatet.
Öppen källkod & licensiering
Aspose.Email FOSS för Python släpps under MIT-licensen. Du får fritt använda, modifiera och distribuera biblioteket i både kommersiella och icke-kommersiella projekt. Den fullständiga källkoden finns tillgänglig på GitHub.
Biblioteket är en ren-Python-implementation utan kompilerade tillägg eller inhemska beroenden. Det körs på alla plattformar som stödjer Python 3.10 eller senare.
Kom igång
Utforska fler resurser för att arbeta med Aspose.Email FOSS för Python:
- Developer Guide — fullständig dokumentation med handledningar och API-genomgångar
- Knowledge Base — hur-man-artiklar och vanliga frågor
- API Reference — komplett klass- och metodreferens