Wprowadzenie
Aspose.Email FOSS for Python wykracza poza podstawowe tworzenie wiadomości. Biblioteka udostępnia pełną głębokość modelu właściwości MAPI, umożliwiając odczyt, zapis i zapytania dotyczące poszczególnych właściwości według identyfikatora i typu. Obsługuje odbiorców, załączniki i osadzone wiadomości jako obiekty pierwszej klasy oraz zapewnia dwukierunkową konwersję między binarnym formatem MSG a standardowym email.message.EmailMessage Pythona.
Na poziomie kontenera czytnik i zapisujący CFB dają deterministyczną kontrolę nad dokumentami Compound File Binary. Możesz przeglądać hierarchie magazynów, wyodrębniać surowe dane strumieni, budować nowe kontenery od podstaw i serializować je z powrotem do bajtów. Zarówno CFBError, jak i MsgError zapewniają strukturalną obsługę wyjątków dla nieprawidłowego wejścia.
Ten post przechodzi przez każdą funkcję, prezentując zweryfikowane przykłady kodu pobrane bezpośrednio z własnego zestawu testów i skryptów przykładowych biblioteki.
Co jest w zestawie
Dostęp do właściwości MAPI
Każdy plik MSG jest zbudowany na właściwościach MAPI. MapiMessage udostępnia set_property() i get_property() do pracy z właściwościami za pomocą ich wartości wyliczeniowej PropertyId. Użyj iter_properties(), aby wyliczyć wszystkie właściwości w wiadomości, lub get_property_value() do bezpośredniego pobierania wartości z opcjonalnym dekodowaniem typu.
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")
Aby odczytać właściwości z istniejącego pliku:
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}")
Odbiorcy i załączniki
Dodaj odbiorców przy użyciu add_recipient(), określając nazwę wyświetlaną i typ odbiorcy (Do, DW lub UDW). Dołącz pliki przy użyciu add_attachment(), używając surowych bajtów i typu MIME. Dla zagnieżdżonych wiadomości, add_embedded_message_attachment() osadza kompletny MapiMessage jako obiekt podrzędny w obrębie rodzica.
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")
Aby sprawdzić załączniki w istniejącej wiadomości:
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}")
Konwersja MSG na EmailMessage
Biblioteka konwertuje w obu kierunkach między MSG a email.message.EmailMessage języka Python. Użyj to_email_message(), aby utworzyć zgodny ze standardami obiekt MIME, lub from_email_message(), aby zaimportować istniejący EmailMessage do formatu MSG. Metody wygodne to_email_bytes() i to_email_string() serializują bezpośrednio do bajtów lub tekstu.
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]}")
Pełny cykl kontenera CFB
Twórz i serializuj kontenery Compound File Binary niezależnie od warstwy MSG. CFBDocument.from_file() ładuje istniejący kontener do mutowalnego modelu dokumentu z węzłami CFBStorage i CFBStream. CFBWriter.write_file() serializuje dokument z powrotem na dysk w sposób deterministyczny.
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")
Obsługa błędów
Biblioteka zgłasza CFBError dla nieprawidłowej zawartości CFB i MsgError dla nieprawidłowej struktury MSG. MapiMessage również udostępnia właściwość validation_issues, która zwraca krotkę ciągów ostrzeżeń bez podnoszenia wyjątku, pozwalając Ci zdecydować, jak ściśle obsługiwać niezgodne pliki.
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}")
Szybki start
pip install aspose-email-foss>=26.3
Wczytaj istniejący plik MSG, odczytaj jego metadane i wyświetl załączniki:
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}")
Obsługiwane formaty
| Format | Import | Eksport |
|---|---|---|
| MSG | Tak | Tak |
| CFB | Tak | Tak |
Open Source i licencjonowanie
Aspose.Email FOSS for Python jest wydany na licencji MIT License. Możesz go używać w projektach osobistych, wewnętrznych i komercyjnych bez ograniczeń. Kod źródłowy jest dostępny na GitHub.