Pliki pamięci masowej Mbox

Głównym celem tego artykułu jest pomoc w zagłębieniu się w format mbox i zaoferowanie fragmentów kodu, które mogą pomóc w procesie odczytywania plików mbox. Zdobędziesz wiedzę o tym, jak analizować pliki mbox, a także jak uzyskiwać dostęp, przeglądać i przechowywać zawarte w nich wiadomości.

Informacje o formacie Mbox

Format mbox ma znaczenie ze względu na długą historię i szeroką akceptację jako znormalizowany format przechowywania wiadomości e-mail. Jest to format pliku tekstowego, który umożliwia łączenie i przechowywanie wielu wiadomości e-mail w jednym pliku. Prostota tego formatu i kompatybilność z różnymi klientami poczty e-mail i systemami sprawiają, że jest on popularnym wyborem do archiwizacji i przesyłania danych e-mail. Ponadto format mbox zachowuje podstawowe metadane, takie jak nadawca, odbiorca, temat i znacznik czasu, zapewniając zachowanie integralności wiadomości.

Najpopularniejsze programy pocztowe kompatybilne z tym formatem to:

  • Thunderbird — szeroko stosowany klient poczty e-mail typu open source, który używa formatu mbox do przechowywania wiadomości e-mail. Przechowuje wszystkie wiadomości z folderu w jednym pliku z rozszerzeniem „.mbox”. Dla wygody użytkownika i łatwego zarządzania dla każdego folderu w skrzynce pocztowej tworzone są osobne pliki. Pozwala użytkownikom bezproblemowo importować i eksportować pliki mbox, ułatwiając migrację danych e-mail między Thunderbirdem a innymi aplikacjami kompatybilnymi z mbox.

  • Apple Mail — domyślny klient poczty e-mail na urządzeniach z systemem macOS i iOS, oferujący wbudowaną obsługę formatu mbox. Pozwala użytkownikom łatwo uzyskiwać dostęp, importować lub przesyłać pliki mbox w Apple Mail, przechowując każdy folder skrzynki pocztowej jako osobny plik. Pliki Apple Mail są zwykle przechowywane z rozszerzeniami „.mbox” lub „.mbox.plist”.

  • Evolution — bogata w funkcje aplikacja do zarządzania pocztą e-mail i informacjami osobistymi dla systemu Linux obsługuje również format mbox. Pozwala użytkownikom importować pliki mbox, umożliwiając płynną integrację danych e-mail z wszechstronną platformą Evolution.

To tylko kilka przykładów klientów pocztowych korzystających z formatu mbox. Zrozumienie formatu i jego użycia w różnych klientach poczty e-mail jest niezbędne podczas programistycznej pracy z takimi plikami, ponieważ pomaga zapewnić kompatybilność i dokładne analizowanie danych poczty e-mail.

Istnieją różne odmiany tego formatu, z których każda ma własne szczegóły implementacji. Niektóre z powszechnie spotykanych formatów mbox to mboxrd, mboxo, mboxcl, mboxcl2. Te odmiany różnią się głównie sposobem obsługi pewnych aspektów, takich jak ograniczniki wiadomości i metadane. Ważne jest, aby zdawać sobie sprawę z tych różnic podczas pracy z plikami mbox, ponieważ mogą one wpływać na kompatybilność i parsowanie danych e-maili.

Python API do odczytu plików Mbox

Praca z plikami mbox w Python jest łatwa dzięki naszej bibliotece Aspose.Email for Python. Ten solidny i bogaty w funkcje interfejs API oferuje szeroki zestaw funkcji do przetwarzania wiadomości e-mail, takich jak możliwość odczytywania plików mbox, wyodrębniania wiadomości i manipulowania danymi e-mail.

Warto wspomnieć, że Aspose.Email for Python oferuje również kompleksowe wsparcie dla różnych formatów mbox, w tym wspomnianych wcześniej. Oznacza to, że możesz bezproblemowo pracować z tymi plikami z różnych klientów pocztowych, niezależnie od konkretnych szczegółów implementacji formatu mbox. Aby wykorzystać moc API, można pobrać jego bibliotekę DLL lub zainstalować ją z PyPI za pomocą następującego polecenia:

> pip install Aspose.Email-for-Python-via-NET

Otwórz plik Mbox

Aby rozpocząć pracę z plikiem w formacie mbox, powinniśmy go najpierw otworzyć. Pomoże nam w tym biblioteka Aspose.Email.

W naszym kodzie wykonamy kroki opisane poniżej:

  • Kod zaczyna się od zaimportowania wymaganych modułów z biblioteki Aspose.Email: klas MboxStorageReader i MboxLoadOptions.

  • Następnie tworzymy instancję MboxLoadOptions, aby określić żądane opcje ładowania pliku.

  • Następnie ustawiamy Leaveopen na False, wskazując, że plik powinien zostać zamknięty po przeczytaniu i określamy UTF8 jako preferowane kodowanie tekstu.

  • Na koniec tworzymy instancję klasy MboxStorageReader wywołując statyczną metodę createreader, przekazując nazwę pliku źródłowego oraz instancję MboxLoadOptions.

Poniższy fragment kodu pokazuje, jak otworzyć plik mbox:

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

mbox_reader = MboxStorageReader.create_reader(file_name, mbox_load_options)

Lista wiadomości z pliku Mbox

Ponieważ plik został otwarty, możemy przeglądać zapisane w nim wiadomości. Poniższe fragmenty kodu przedstawiają dwa podejścia do listowania wiadomości z pliku mbox.

Podejście 1: Metoda EnumerateMessageInfo

Pierwszym podejściem do wyświetlania wiadomości z pliku mbox jest użycie metody enumeratemessageinfo klasy MboxStorageReader. Iteruje wiadomości i wyświetla podstawowe informacje o wiadomości, takie jak temat, pola od, do i data. Zwraca również identyfikator wiadomości (identyfikator wpisu), który jest później używany do odczytania pełnej treści wiadomości. To podejście ma następujące cechy:

  • Wydajność: jest szybsza w porównaniu z innym podejściem ze względu na skupienie się na czytaniu i wyświetlaniu podstawowych informacji o wiadomości, unikając analizowania i ładowania treści wiadomości podczas iteracji.

  • Wydajność: ukierunkowanie tylko na podstawowe informacje minimalizuje zużycie pamięci i czas przetwarzania. Jest to szczególnie przydatne, gdy mamy do czynienia z dużymi plikami zawierającymi wiele wiadomości.

Aby czytać, wyświetlać i wyświetlać wiadomości w pliku mbox, wykonamy następujące czynności:

  • Zaimportuj wymagane moduły z biblioteki Aspose.Email: klasy MboxStorageReader i MboxLoadOptions.

  • Utwórz instancję klasy MboxLoadOptions. Ten obiekt będzie zawierał różne opcje ładowania pliku.

  • Skonfiguruj właściwości obiektu:

    • Ustaw Leaveopen na False, jeśli chcesz zamknąć plik po jego przeczytaniu.
    • Ustaw preferowane kodowanie tekstu na „utf-8”, aby określić żądane kodowanie tekstu dla treści wiadomości.
  • Otwórz plik metodą MboxStorageReader.createreader() klasy MboxStorageReader.

  • Przejrzyj każdą wiadomość w pliku, używając metody enumeratemessageinfo() obiektu mboxreader, wyodrębniając określone szczegóły z każdej wiadomości. W naszym przykładzie są to temat, adres, data i data.

Poniższy fragment kodu demonstruje proces iteracji komunikatów przy użyciu metody enumeratemessageinfo i ich pobierania informacji.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        print(message_info.subject)
        print(message_info.from_address)
        print(message_info.to)
        print(message_info.date)

W ten sposób możemy uzyskać dostęp do właściwości, takich jak Temat, Od, Do i Data oraz wyświetlić odpowiednie szczegóły.

Podejście 2: Metoda EnumerateMessages

W przeciwieństwie do pierwszego podejścia, drugie ma na celu bezpośrednie iterowanie instancji MailMessage zawartych w pliku mbox przy użyciu metody enumeratemessages. Ta metoda odczytuje i ładuje całą treść wiadomości podczas każdej iteracji, umożliwiając natychmiastowy dostęp do pełnych informacji e-mail. Oto kilka kluczowych aspektów tego podejścia:

  • Kompletność: umożliwia dostęp i przetwarzanie całej treści wiadomości, w tym treści, załączników, nagłówków i innych części.

  • Wygoda: To podejście okazuje się przydatne, gdy chcesz wykonać operacje na całej wiadomości, takie jak zapisanie każdej wiadomości w osobnym pliku. Upraszcza proces, ładując całą treść wiadomości podczas każdej iteracji, umożliwiając wykonanie żądanych operacji bez konieczności kolejnych wyszukiwań.

Poniższy fragment kodu demonstruje proces iteracji komunikatów przy użyciu metody enumeratemessages i pobierania całej treści komunikatu.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for eml in mbox_reader.enumerate_messages():
        eml.save(f"{eml.subject}.eml")

Warto zauważyć, że ładowanie całej zawartości wiadomości dla każdej iteracji może potencjalnie wpłynąć na wydajność, szczególnie w przypadku dużych plików lub znacznej liczby wiadomości. Dlatego ważne jest, aby ocenić swoje specyficzne potrzeby i wziąć pod uwagę takie czynniki, jak rozmiar pliku, liczba wiadomości i operacje, które zamierzasz wykonać przy określaniu najbardziej odpowiedniego podejścia w danej sytuacji.

Czytaj wiadomości w plikach Mbox

Inną operacją, którą możesz chcieć wykonać na pliku mbox, jest odczytywanie zawartych w nim wiadomości. Możesz to zrobić, używając ich identyfikatora ciągu pochodzącego z pierwszego podejścia polegającego na wyliczaniu MessageInfo.

Podczas używania metody enumeratemessageinfo do wyświetlania wiadomości, każda wiadomość jest powiązana z unikalnym identyfikatorem w pojedynczym pliku mbox. Identyfikator ten, zwykle reprezentowany jako ciąg, można uzyskać z właściwości entryid obiektu MboxMessageInfo.

Po uzyskaniu identyfikatora wiadomości możemy go użyć do wyświetlenia pełnej treści wiadomości, wykonując następujące czynności:

  • Tworzymy instancję EmlLoadOptions. Ten obiekt będzie zawierał różne opcje ładowania plików EML.
  • Skonfiguruj właściwości:
    • Ustaw opcję keepembeddedmessageformat na True, jeśli chcesz zachować osadzony format wiadomości w pliku EML.
    • Ustaw opcję keeptnefattachments na True, jeśli chcesz zachować załączniki TNEF w pliku EML.
  • Utwórz instancję MboxLoadOptions. Ten obiekt będzie zawierał różne opcje ładowania pliku mbox.
  • Skonfiguruj właściwości mboxloadoptions:
    • Ustaw Leaveopen na False, jeśli chcesz zamknąć plik po jego przeczytaniu.
    • Ustaw preferowane kodowanie tekstu na „utf-8”, aby określić żądane kodowanie tekstu dla treści wiadomości.
  • Otwórz plik metodą MboxStorageReader.createreader().
  • Wewnątrz pętli foreach uzyskujemy dostęp do właściwości EntryId każdego obiektu MboxMessageInfo, która reprezentuje unikalny identyfikator odpowiedniej wiadomości.
  • Następnie używamy tego identyfikatora wraz z metodą ExtractMessage klasy MboxStorageReader, aby pobrać całą wiadomość jako obiekt MailMessage.
  • Wreszcie możemy wykonać dowolne operacje na wiadomości, takie jak zapisanie jej do osobnego pliku .eml.

Poniższy fragment kodu pokazuje, jak odczytać pojedynczą wiadomość za pomocą jej identyfikatora ciągu:

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions
from aspose.email import EmlLoadOptions

eml_load_options = EmlLoadOptions()
eml_load_options.preserve_embedded_message_format = True
eml_load_options.preserve_tnef_attachments = True

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        eml = mbox_reader.extract_message(message_info.entry_id, eml_load_options)
        eml.save(f"{eml.subject}.eml")

Istotną zaletą tego podejścia jest to, że umożliwia selektywne odczytywanie i przetwarzanie określonych komunikatów z pominięciem innych. Ta elastyczność okazuje się szczególnie korzystna w przypadku dużych plików zawierających dużą liczbę wiadomości. Dzięki selektywnemu przetwarzaniu tylko żądanych komunikatów minimalizuje się niepotrzebne obliczenia, co skutkuje poprawą ogólnej wydajności.

Kluczowe jest zrozumienie, że identyfikator wiadomości jest unikalny w obrębie jednego pliku. Dlatego podczas pracy z wiadomościami w wielu plikach mbox konieczne staje się zachowanie mapowania między tymi identyfikatorami a odpowiadającymi im plikami.

Funkcje użytkowe

Biblioteka Aspose.Email oferuje kilka narzędzi usprawniających pracę z plikami mbox. Rozważmy kilka z nich:

Uzyskaj całkowitą liczbę elementów przechowywanych w mbox

Istnieje prosty sposób określenia całkowitej liczby elementów (wiadomości) przechowywanych w pliku mbox. Użyj metody gettotalitemscount(), aby pobrać całkowitą liczbę elementów (wiadomości) znajdujących się w pliku.

Poniższy kod pobiera całkowitą liczbę elementów (wiadomości) znajdujących się w pliku.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
    items_count = mbox_reader.get_total_items_count()

Uzyskaj odczyt rozmiaru danych w jednej iteracji

Aby uzyskać rozmiar danych odczytywanych podczas pojedynczej iteracji, można uzyskać dostęp do właściwości currentdatasize obiektu mboxreader w celu pobrania rozmiaru danych (wiadomości) odczytywanych w bieżącej iteracji.

Poniższy kod wykonuje iterację każdego komunikatu w pliku. Podczas każdej iteracji uzyskuje się rozmiar aktualnie czytanej wiadomości.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        message_size = mbox_reader.current_data_size

Wniosek

W tym artykule przyjrzeliśmy się mbox — ustandaryzowanemu i powszechnie akceptowanemu formatowi przechowywania wiadomości e-mail. Jego prostota i kompatybilność z różnymi klientami poczty e-mail i systemami sprawiają, że jest to popularny wybór do archiwizacji i przesyłania danych e-mail. Format, w tym jego odmiany, jest obsługiwany przez naszą potężną bibliotekę Aspose.Email for Python, która umożliwia łatwe odczytywanie, wyodrębnianie i manipulowanie danymi e-mail. Nasze proste fragmenty kodu i kroki kodu zawierały wyczerpujące i szczegółowe instrukcje dotyczące otwierania, wyświetlania i przeglądania wiadomości w plikach mbox.

Możesz poznać inne funkcje Aspose.Email, korzystając z dokumentacji. Możesz także zamieścić swoje zapytania na naszym forum.

Zobacz też