Programowanie z Thunderbird
Odczyt plików MBOX
Mozilla Thunderbird jest otwarto‑źródłowym, wieloplatformowym klientem poczty elektronicznej, opracowanym przez Mozilla Foundation. Przechowuje e‑maile we własnej strukturze plików, zarządzając indeksami wiadomości i podfolderami przy użyciu własnych formatów plików. Aspose.Email może współpracować ze strukturami magazynu poczty Thunderbird. MboxrdStorageReader klasa umożliwia programistom odczyt wiadomości z pliku magazynu poczty Mozilla Thunderbird. Ten artykuł pokazuje, jak odczytać wiadomości z magazynu poczty Thunderbird:
- Otwórz plik magazynu Thunderbird w FileStream.
- Utwórz instancję MboxrdStorageReader klasa i przekaż powyższy strumień do konstruktora.
- Wywołaj ReadNextMessage() aby uzyskać pierwszą wiadomość.
- Użyj tego samego ReadNextMessage() w pętli while, aby odczytać wszystkie wiadomości.
- Zamknij wszystkie strumienie.
Poniższy fragment kodu pokazuje, jak odczytać wszystkie wiadomości z magazynu poczty Thunderbird.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Create an instance of the MboxrdStorageReader class and pass the stream
var reader = new MboxrdStorageReader(stream, false);
// Start reading messages
var message = reader.ReadNextMessage();
// Read all messages in a loop
while (message != null)
{
// Manipulate message - show contents
Console.WriteLine("Subject: " + message.Subject);
// Save this message in EML or MSG format
message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);
// Get the next message
message = reader.ReadNextMessage();
}
// Close the streams
reader.Dispose();
stream.Close();
Pobieranie właściwości wiadomości
MboxMessageInfo klasa zawiera następujące właściwości do pobierania informacji o wiadomości:
- DateTime Date - Pobiera datę wiadomości
- MailAddress From - Pobiera adres nadawcy
- string Subject - Pobiera temat wiadomości
- MailAddressCollection Do - Pobiera kolekcję adresów zawierającą odbiorców wiadomości
- MailAddressCollection CC - Pobiera kolekcję adresów zawierającą odbiorców DW (CC)
- MailAddressCollection Bcc - Pobiera kolekcję adresów zawierającą odbiorców ukrytych (BCC) wiadomości
MboxStorageReader reader = MboxStorageReader.CreateReader(fileName, new MboxLoadOptions());
foreach (var mboxMessageInfo in reader.EnumerateMessageInfo())
{
Console.Writeline($"Subject: {mboxMessageInfo.Subject}");
Console.Writeline($"Date: {mboxMessageInfo.Date}");
Console.Writeline($"From: {mboxMessageInfo.From}");
Console.Writeline($"To: {mboxMessageInfo.To}");
Console.Writeline($"CC: {mboxMessageInfo.CC}");
Console.Writeline($"Bcc: {mboxMessageInfo.Bcc}");
}
Wyodrębnianie wiadomości z MBOX po identyfikatorach
Ten MboxStorageReader klasa zawiera EnumerateMessageInfo() metoda, która umożliwia iterację po każdej wiadomości w pliku MBOX. Korzystając z tej metody, można wyodrębnić poszczególne wiadomości bez konieczności wielokrotnego przeglądania całego magazynu. Poprawia to wydajność i skraca czas przetwarzania.
Ten MboxMessageInfo klasa udostępnia EntryId właściwość, która zapewnia dostęp do unikalnych identyfikatorów każdej wiadomości w pliku MBOX. Ten identyfikator może być przechowywany w bazie danych lub używany jako odniesienie do szybkiego znajdowania i wyodrębniania konkretnych wiadomości w razie potrzeby.
Ten ExtractMessage(string id) metoda w MboxStorageReader klasa umożliwia programistom wyodrębnianie wiadomości na podstawie ich unikalnego EntryId. Z ExtractMessage(string id) metoda, możesz wykorzystać zapisany EntryId do pobrania odpowiadającej wiadomości i wykonania dodatkowych operacji.
Poniższy przykład kodu demonstruje, jak wyodrębnić wiadomości z pliku MBOX przy użyciu identyfikatorów:
MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());
foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}
Konfigurowanie opcji ładowania przy odczycie wiadomości z MBOX
Poniższe funkcje umożliwią określenie różnych opcji związanych z ładowaniem i przetwarzaniem wiadomości:
-
Właściwość MailStorageConverter.MboxMessageOptions – pobiera lub ustawia opcje ładowania e‑maili podczas parsowania magazynu Mbox.
-
Metoda MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) – parametr EmlLoadOptions określa opcje podczas odczytu wiadomości z magazynu Mbox.
var reader = new MboxrdStorageReader(fileName, new MboxLoadOptions());
// Read messages preserving tnef attachments.
var eml = reader.ReadNextMessage(new EmlLoadOptions {PreserveTnefAttachments = true});
MailStorageConverter.MboxMessageOptions(new EmlLoadOptions {PreserveTnefAttachments = true});
// Convert messages from mbox to pst preserving tnef attachments.
var pst = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");
Ustawianie preferowanego kodowania tekstu przy ładowaniu plików Mbox do odczytu
Opcja kodowania jest dostępna dla klasy MboxrdStorageReader. Zapewnia dodatkowe opcje ładowania pliku mbox i gwarantuje, że wiadomości z zakodowaną zawartością będą prawidłowo odczytywane i przetwarzane. Poniższy fragment kodu pokazuje, jak ustawić kodowanie tekstu spełniające Twoje potrzeby:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Uzyskiwanie całkowitej liczby wiadomości z pliku MBOX
Ten MboxrdStorageReader klasa zapewnia możliwość odczytania liczby elementów dostępnych w pliku MBox. Może to być użyte do tworzenia aplikacji wyświetlających postęp działania podczas przetwarzania takiego pliku.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
Console.WriteLine("Total number of messages in Mbox file: " + reader.GetTotalItemsCount());
}
Pobierz bieżący rozmiar wiadomości
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
MailMessage msg;
while ((msg = reader.ReadNextMessage()) != null)
{
long currentDataSize = reader.CurrentDataSize;
msg.Dispose();
}
}
Konwersja MBOX do PST z zachowaniem lub usunięciem podpisu
Aby usunąć podpis z pliku podczas procesu konwersji, ustaw MboxToPstConversionOptions.RemoveSignature ustaw właściwość na true.
Poniższy przykład kodu pokazuje, jak wykorzystać tę właściwość:
var pstDataStream = new MemoryStream();
var personalStorage = PersonalStorage.Create(pstDataStream, FileFormatVersion.Unicode);
MailStorageConverter.MboxToPst(new MboxrdStorageReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), new MboxLoadOptions()),
personalStorage,
"Inbox",
new MboxToPstConversionOptions() { RemoveSignature = true });
Zapisywanie plików MBOX
Ten MboxrdStorageWriter klasa zapewnia możliwość zapisywania nowych wiadomości do pliku magazynu poczty Thunderbird. Aby zapisać wiadomości:
- Otwórz plik magazynu Thunderbird w FileStream.
- Utwórz instancję MboxrdStorageWriter klasa i przekaż powyższy strumień do konstruktora.
- Przygotuj nową wiadomość przy użyciu MailMessage klasa.
- Wywołaj WriteMessage() metoda i przekazać powyższe MailMessage instancja służąca do dodania wiadomości do magazynu Thunderbird.
- Zamknij wszystkie strumienie.
Poniższy fragment kodu pokazuje, jak zapisać wiadomości do magazynu poczty Thunderbird.
// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Write);
// Initialize MboxStorageWriter and pass the above stream to it
var writer = new MboxrdStorageWriter(stream, false);
// Prepare a new message using the MailMessage class
var message = new MailMessage("from@domain.com", "to@domain.com", Guid.NewGuid().ToString(), "added from Aspose.Email");
message.IsDraft = false;
// Add this message to storage
writer.WriteMessage(message);
// Close all related streams
writer.Dispose();
stream.Close();
Podziel przechowywanie MBOX/Anuluj operację dzielenia
Aspose.Email udostępnia metody do dzielenia przechowywania Mbox na mniejsze części, co ułatwia obsługę dużych archiwów e‑mail. W zależności od używanej wersji .NET dostępne metody i ich parametry mogą się różnić. Poniżej znajdują się metody MboxStorageReader klasa używana zarówno w wersjach .NET Framework 4.5 i .NET Core, jak i w wersjach poniżej 4.5.
Członkowie dla .NET Framework 4.5 i wersji .NET Core:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token) - Dzieli magazyn Mbox na mniejsze części na podstawie określonego rozmiaru fragmentu.
-
Parametry:
- chunkSize: Przybliżony rozmiar każdej części w bajtach.
- outputPath: Ścieżka folderu, w którym zostaną utworzone części.
- token: CancellationToken, który umożliwia ewentualne anulowanie operacji.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Dzieli magazyn Mbox na mniejsze części, z określonym prefiksem nazwy pliku dla każdej części.
-
Parametry:
- chunkSize: Przybliżony rozmiar każdej części w bajtach.
- outputPath: Ścieżka folderu, w którym zostaną utworzone części.
- partFileNamePrefix: Prefiks, który zostanie dodany do nazwy pliku każdej części.
- token: CancellationToken, który umożliwia ewentualne anulowanie operacji.
Członkowie dla wersji .NET Framework poniżej 4.5:
-
SplitInto(long chunkSize, string outputPath) - Dzieli magazyn Mbox na mniejsze części na podstawie określonego rozmiaru fragmentu.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - Dzieli magazyn Mbox na mniejsze części, z określonym prefiksem nazwy pliku dla każdej części.
-
Cancel() – Przerywa trwającą operację podziału.
Poniższe przykłady kodu demonstrują, jak podzielić plik MBOX na części, ograniczając proces do maksymalnie pięciu części, wykorzystując mechanizm anulowania:
.NET Framework 4.5 i .NET Core:
int partCount = 0;
var tokenSource = new CancellationTokenSource();
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
// Subscribe to events
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
tokenSource.Cancel();
};
System.Threading.Tasks.Task task = mbox.SplitInto(10000000, outputPath, tokenSource.Token);
task.Wait();
.NET Framework poniżej 4.5:
int partCount = 0;
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
mbox.SplitInto(10000000, outputPath);
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
mbox.Cancel();
};