Wprowadzenie
Programowe parsowanie wiadomości e-mail jest powszechnym wymogiem przy migracji danych, procesach archiwizacji i narzędziach zgodności. Pliki Outlook MSG używają formatu kontenera Compound File Binary (CFB) z właściwościami MAPI do kodowania metadanych wiadomości, treści ciała, odbiorców i załączników. Praca z tym formatem w Python tradycyjnie wymagała zarówno komercyjnych bibliotek, jak i niskopoziomowej manipulacji binarnej.
Pakiet aspose-email-foss zapewnia czystą w Python, licencjonowaną na licencji MIT bibliotekę do odczytu, tworzenia i konwertowania plików Outlook MSG. Udostępnia wysokopoziomowy MapiMessage API do typowych zadań oraz niżej-poziomowy dostęp MsgReader do szczegółowej inspekcji podstawowej struktury CFB. Biblioteka wymaga Python w wersji 3.10 lub nowszej i nie ma natywnych zależności.
Niezależnie od tego, czy musisz wyodrębnić temat i treść z partii zarchiwizowanych wiadomości, wyliczyć załączniki w celu indeksacji, czy skonwertować pliki MSG do standardowego formatu RFC 5322, ta biblioteka zajmuje się parsowaniem binarnym, abyś mógł skupić się na logice swojej aplikacji.
Co zawiera
Odczytywanie plików MSG przy użyciu MapiMessage
Klasa MapiMessage jest głównym punktem wejścia do parsowania plików Outlook MSG. Otwórz plik, uzyskaj dostęp do jego właściwości i zamknij go w czysty sposób za pomocą menedżera kontekstu.
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}")
Metoda from_file odczytuje kontener CFB, analizuje strumienie właściwości MAPI i wypełnia atrybuty typowane. Właściwości subject, body i body_html zwracają bezpośrednio odszyfrowane ciągi znaków.
Wyodrębnianie odbiorców
Każdy plik MSG przechowuje informacje o odbiorcach w dedykowanych magazynach MAPI. Właściwość MapiMessage.recipients zwraca listę obiektów MapiRecipient z typowanymi polami dla wyświetlanej nazwy, adresu e-mail oraz typu odbiorcy (TO, CC lub 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}"
)
Praca z załącznikami
Metoda iter_attachments_info zwraca obiekty MapiAttachment, które dostarczają nazwę pliku, surowe bajty, typ MIME oraz opcjonalny Content-ID dla obrazów wstawionych 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}")
Dostęp do właściwości MAPI
W sytuacjach, które wymagają konkretnych wartości właściwości MAPI poza wygodnymi atrybutami, użyj get_property_value z stałą PropertyId. Zapewnia to bezpośredni dostęp do dowolnej właściwości przechowywanej w pliku 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}")
Iterowanie wszystkich właściwości
Kiedy musisz przejrzeć każdą właściwość w wiadomości (w celach debugowania, audytu lub migracji), metoda iter_properties zwraca obiekty MapiProperty z pełną informacją o tagu i wartości.
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}"
)
Konwersja MSG do EML
Metoda to_email_message konwertuje przetworzone MSG na standardowy obiekt Python email.message.EmailMessage. Następnie możesz serializować wiadomość do formatu RFC 5322 (EML) przy użyciu biblioteki standardowej.
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)
Zauważ, że wyjście EML korzysta z wbudowanego modułu email w Python do serializacji. Biblioteka obsługuje konwersję MSG-do-MAPI-do-EmailMessage; biblioteka standardowa obsługuje format przewodowy RFC 5322.
Szybki start
Zainstaluj pakiet z PyPI i sparsuj swój pierwszy plik MSG w mniej niż 20 linijkach:
# 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)")
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| Outlook MSG | .msg | Tak | Tak |
| Compound File Binary | .cfb | Tak | Tak |
| EML (poprzez konwersję) | .eml | Tak (poprzez from_email_message) | Tak (poprzez to_email_message) |
Obsługa EML działa poprzez konwersję: MapiMessage.from_email_message() importuje z obiektu Python email.message.EmailMessage, a to_email_message() eksportuje z powrotem. Bezpośrednie parsowanie plików EML nie jest dostępne — biblioteka standardowa obsługuje format przewodowy EML.
Open Source i licencjonowanie
Aspose.Email FOSS dla Python jest udostępniony na licencji MIT. Masz wolność używać, modyfikować i rozpowszechniać bibliotekę zarówno w projektach komercyjnych, jak i niekomercyjnych. Pełny kod źródłowy jest dostępny pod adresem GitHub.
Biblioteka jest czystą implementacją Python bez skompilowanych rozszerzeń ani zależności natywnych. Działa na każdej platformie, która obsługuje Python 3.10 lub nowszy.
Rozpoczęcie
Poznaj więcej zasobów do pracy z Aspose.Email FOSS dla Python:
- Developer Guide — pełna dokumentacja z samouczkami i przewodnikami po API
- Knowledge Base — artykuły instruktażowe i najczęściej zadawane pytania
- API Reference — pełna referencja klas i metod