Introduksjon
Aspose.Email FOSS for Python goes beyond basic message creation. The library exposes the full depth of the MAPI property model, letting you read, write, and query individual properties by ID and type. It handles recipients, attachments, and embedded messages as first-class objects, and provides bidirectional conversion between the MSG binary format and Python’s standard email.message.EmailMessage.
På containernivå gir CFB-leseren og -skriveren deg deterministisk kontroll over Compound File Binary-dokumenter. Du kan traversere lagringshierarkier, hente ut rå strømdata, bygge nye containere fra bunnen av, og serialisere dem tilbake til bytes. Begge CFBError og MsgError gir strukturert unntakshåndtering for feilaktig input.
Dette innlegget går gjennom hver funksjon med verifiserte kodeeksempler hentet direkte fra bibliotekets egen testpakke og eksempelskript.
Hva som er inkludert
MAPI-egenskapsadgang
Hver MSG-fil er bygget på MAPI-egenskaper. MapiMessage eksponerer set_property() og get_property() for å arbeide med egenskaper etter deres PropertyId enum-verdi. Bruk iter_properties() for å enumerere alle egenskaper på en melding, eller get_property_value() for direkte verdihenting med valgfri type-dekoding.
from aspose.email_foss import msg
message = msg.MapiMessage.create("Status report", "Weekly update attached.")
message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "build.agent@example.com")
message.set_property(msg.PropertyId.DISPLAY_TO, "Alice Example; Bob Example")
message.set_property(msg.PropertyId.DISPLAY_CC, "Carol Example")
message.set_property(msg.PropertyId.DISPLAY_BCC, "Ops Archive")
message.set_property(
msg.PropertyId.TRANSPORT_MESSAGE_HEADERS,
"X-Environment: production\nX-Workflow: weekly-report\n",
)
message.save("report.msg")
For å lese egenskaper fra en eksisterende fil:
from aspose.email_foss import msg
with msg.MapiMessage.from_file("report.msg") as loaded:
print(f"Subject: {loaded.subject}")
print(f"Body: {loaded.body}")
for prop in loaded.iter_properties():
print(f"tag=0x{prop.property_tag:08X}")
Mottakere og vedlegg
Legg til mottakere med add_recipient(), og spesifiser visningsnavn og mottakertype (Til, CC eller BCC). Legg ved filer med add_attachment() ved å bruke rå bytes og en MIME-type. For nestede meldinger, add_embedded_message_attachment() bygger inn en komplett MapiMessage som et underobjekt i forelderobjektet.
from aspose.email_foss import msg
message = msg.MapiMessage.create("Team update", "See attached notes.")
message.add_recipient("alice@example.com", display_name="Alice Example")
message.add_recipient(
"carol@example.com",
display_name="Carol Example",
recipient_type=msg.RECIPIENT_TYPE_CC,
)
message.add_recipient(
"archive@example.com",
display_name="Ops Archive",
recipient_type=msg.RECIPIENT_TYPE_BCC,
)
message.add_attachment("notes.txt", b"Meeting notes content\n", mime_type="text/plain")
message.add_attachment("data.bin", b"\x00\x01\x02\x03", mime_type="application/octet-stream")
message.save("team-update.msg")
For å inspisere vedlegg på en eksisterende melding:
from aspose.email_foss import msg
with msg.MapiMessage.from_file("team-update.msg") as loaded:
for att in loaded.iter_attachments_info():
print(f"name={att.filename} mime={att.mime_type} size={len(att.data)}")
print(f" embedded={att.is_embedded_message} storage={att.storage_name}")
MSG til EmailMessage-konvertering
Biblioteket konverterer i begge retninger mellom MSG og Pythons email.message.EmailMessage. Bruk to_email_message() for å lage et standard‑kompatibelt MIME‑objekt, eller from_email_message() for å importere en eksisterende EmailMessage til MSG‑formatet. Praktiske metoder to_email_bytes() og to_email_string() serialiserer direkte til bytes eller tekst.
from aspose.email_foss import msg
with msg.MapiMessage.from_file("example.msg") as loaded:
email_msg = loaded.to_email_message()
print(f"content_type: {email_msg.get_content_type()}")
print(f"is_multipart: {email_msg.is_multipart()}")
print(f"headers: {len(email_msg)}")
for key, value in email_msg.items():
print(f" {key}: {value}")
body_part = email_msg.get_body(preferencelist=("plain", "html"))
if body_part is not None:
print(f"body: {body_part.get_content()[:200]}")
CFB-beholder rundtur
Bygg og serialiser Compound File Binary-beholdere uavhengig av MSG-laget. CFBDocument.from_file() laster en eksisterende beholder inn i en muterbar dokumentmodell med CFBStorage og CFBStream noder. CFBWriter.write_file() serialiserer dokumentet tilbake til disk på en deterministisk måte.
from aspose.email_foss.cfb import CFBDocument, CFBReader, CFBWriter
reader = CFBReader.from_file("container.cfb")
document = CFBDocument.from_reader(reader)
reader.close()
output = CFBWriter.to_bytes(document)
print(f"Serialized {len(output)} bytes")
Feilhåndtering
Biblioteket kaster CFBError for feilformatert CFB-innhold og MsgError for ugyldig MSG-struktur. MapiMessage eksponerer også en validation_issues egenskap som returnerer en tuple av advarselstrenger uten å kaste et unntak, slik at du kan bestemme hvor strengt du vil håndtere filer som ikke er i samsvar.
from aspose.email_foss.cfb import CFBReader, CFBError
from aspose.email_foss.msg import MsgReader, MsgError
try:
reader = CFBReader.from_file("corrupted.cfb")
except CFBError as e:
print(f"CFB parse error: {e}")
try:
reader = MsgReader.from_file("malformed.msg")
except MsgError as e:
print(f"MSG parse error: {e}")
Rask start
pip install aspose-email-foss>=26.3
Last inn en eksisterende MSG, les metadataene, og list opp vedlegg:
from aspose.email_foss import msg
with msg.MapiMessage.from_file("inbox-message.msg") as message:
print(f"Subject: {message.subject}")
print(f"Body preview: {message.body[:200] if message.body else '(empty)'}")
for att in message.iter_attachments_info():
print(f"Attachment: {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
issues = message.validation_issues
if issues:
print(f"Warnings: {issues}")
Støttede formater
| Format | Import | Eksport |
|---|---|---|
| MSG | Ja | Ja |
| CFB | Ja | Ja |
Åpen kilde og lisensiering
Aspose.Email FOSS for Python is released under the MIT License. Du kan bruke den i personlige, interne og kommersielle prosjekter uten restriksjoner. Kildekoden er tilgjengelig på GitHub.