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-fossWymaga Pythona 3.10 lub nowszego.
Krok 2: Importuj klasę MapiMessage
from aspose.email_foss.msg import MapiMessageKrok 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.