Jak parsować pliki MSG w Pythonie

Jak parsować pliki MSG w Pythonie

aspose-email-foss dla Pythona zapewnia czysto‑Pythonowe API do odczytu plików Outlook MSG bez zależności od Microsoft Office. Załaduj plik do obiektu MapiMessage, aby uzyskać dostęp do wszystkich danych wiadomości.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

pip install aspose-email-foss

Wymaga Pythona 3.10 lub nowszego.


Krok 2: Importuj klasę MapiMessage

from aspose.email_foss.msg import MapiMessage

Krok 3: Załaduj plik MSG

msg = MapiMessage.from_file("message.msg")

Aby umożliwić tolerancyjne parsowanie uszkodzonych plików, przekaż strict=False:

msg = MapiMessage.from_file("message.msg", strict=False)

Krok 4: Dostęp do właściwości wiadomości

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

Krok 5: Lista załączników

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

Krok 6: Sprawdź strukturę CFB niskiego poziomu

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

Typowe problemy i rozwiązania

CFBError podczas ładowania

Plik nie jest prawidłowym kontenerem CFB. Zweryfikuj, czy jest rzeczywistym plikiem Outlook MSG, a nie EML.

Treść jest pusta, ale ciało HTML zawiera treść

Niektóre wiadomości przechowują treść wyłącznie w HTML. Sprawdź msg.body_html, gdy msg.body zwraca None.

Ostrzeżenia walidacji

Uzyskaj dostęp msg.validation_issues, aby zobaczyć krotkę ostrzeżeń o zgodności dla załadowanego pliku.


Najczęściej zadawane pytania (FAQ)

Czy mogę odczytać pliki EML?

Nie bezpośrednio. Biblioteka obsługuje format MSG (CFB). Konwertuj zawartość EML na obiekt EmailMessage, a następnie użyj MapiMessage.from_email_message().

Czy ładowanie odczytuje wszystkie dane załącznika do pamięci?

Nie. Metadane załącznika są odczytywane na żądanie. Użyj iter_attachments_info() do lekkiej iteracji.

Czy jest bezpieczny wątkowo?

Każda instancja MapiMessage jest niezależna. Jednoczesne odczyty z osobnych instancji są bezpieczne.

 Polski