Programmeren met Thunderbird

MBOX‑bestanden lezen

Mozilla Thunderbird is een open‑source, cross‑platform e‑mailclient, ontwikkeld door de Mozilla Foundation. Het slaat e‑mails op in een eigen bestandsstructuur, beheert berichtenindexen en submappen via propriëtaire bestandsformaten. Aspose.Email kan werken met de mailopslagstructuren van Thunderbird. De MboxrdStorageReader klasse stelt ontwikkelaars in staat berichten te lezen uit een Mozilla Thunderbird‑mailopslagbestand. Dit artikel laat zien hoe de berichten uit Thunderbird‑e‑mailopslag gelezen kunnen worden:

  1. Open het Thunderbird‑opslagbestand in FileStream.
  2. Maak een instantie van de MboxrdStorageReader klasse en geef de bovenstaande stream door aan de constructor.
  3. Roep ReadNextMessage() om het eerste bericht te krijgen.
  4. Gebruik dezelfde ReadNextMessage() in een while‑lus om alle berichten te lezen.
  5. Sluit alle streams.

Het volgende code‑fragment laat zien hoe je alle berichten uit een Thunderbird‑mailopslag kunt lezen.

// 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();

Berichteigenschappen ophalen

MboxMessageInfo klasse bevat de volgende eigenschappen om informatie over een bericht op te halen:

  • DateTime Date - Haalt de datum van het bericht op
  • MailAddress From - Haalt het afzenderadres op
  • string Subject - Haalt het onderwerp van het bericht op
  • MailAddressCollection Aan - Haalt de adressenverzameling op die de ontvangers van het bericht bevat
  • MailAddressCollection CC - Haalt de adressenverzameling op die CC‑ontvangers bevat
  • MailAddressCollection Bcc - Haalt de adressenverzameling op die BCC‑ontvangers van het bericht bevat
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}");
}

Berichten uit MBOX extraheren op basis van identifiers

De MboxStorageReader klasse bevat de EnumerateMessageInfo() methode, die u in staat stelt door elk bericht in een MBOX‑bestand te itereren. Door gebruik te maken van deze methode is het mogelijk individuele berichten te extraheren zonder de gehele opslag telkens te doorlopen. Dit verbetert de prestaties en verkort de verwerkingstijd.

De MboxMessageInfo class biedt de EntryId eigenschap, die toegang biedt tot unieke identifiers voor elk bericht in het MBOX‑bestand. Deze identifier kan in een database worden opgeslagen of als referentie worden gebruikt om snel specifieke berichten te vinden en te extraheren wanneer nodig.

De ExtractMessage(string id) methode in de MboxStorageReader klasse stelt ontwikkelaars in staat berichten te extraheren op basis van hun unieke EntryId. Met de ExtractMessage(string id) methode, kunt u de opgeslagen EntryId gebruiken om het bijbehorende bericht op te halen en er extra bewerkingen mee uit te voeren.

Het volgende codevoorbeeld laat zien hoe u berichten uit een MBOX‑bestand kunt extraheren met behulp van identifiers:

MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());

foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
    MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}

De laadopties configureren bij het lezen van berichten uit MBOX

De volgende functies stellen u in staat verschillende opties met betrekking tot het laden en verwerken van berichten op te geven:

  • MailStorageConverter.MboxMessageOptions eigenschap - Haalt de e‑maillaadopties op of stelt ze in bij het parseren van een Mbox‑opslag.

  • MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) methode - De parameter EmlLoadOptions specificeert opties bij het lezen van een bericht uit Mbox‑opslag.

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");

Voorkeurstekencodering instellen bij het laden van Mbox‑bestanden voor lezen

Coderingoptie is beschikbaar voor de MboxrdStorageReader‑klasse. Dit biedt extra opties voor het laden van het mbox‑bestand en zorgt ervoor dat berichten met gecodeerde inhoud correct worden gelezen en verwerkt. Het volgende codefragment toont hoe u tekencodering kunt instellen die aan uw behoeften voldoet:

var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();

Het totale aantal berichten uit een MBOX‑bestand ophalen

De MboxrdStorageReader klasse biedt de mogelijkheid om het aantal items in een MBox‑bestand te lezen. Dit kan worden gebruikt om applicaties te ontwikkelen die de voortgang van de activiteit tonen tijdens het verwerken van zo’n bestand.

// 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());
}

Huidige berichtgrootte ophalen

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();
    }
}

MBOX naar PST converteren met behoud of verwijdering van een handtekening

Om de handtekening uit een bestand te verwijderen tijdens het conversieproces, stelt u de MboxToPstConversionOptions.RemoveSignature eigenschap naar true.

De volgende code‑voorbeeld toont hoe deze eigenschap gebruikt kan worden:

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 });

MBOX‑bestanden schrijven

De MboxrdStorageWriter klasse biedt de mogelijkheid om nieuwe berichten naar het Thunderbird‑mailopslagbestand te schrijven. Om berichten te schrijven:

  1. Open het Thunderbird‑opslagbestand in FileStream.
  2. Maak een instantie van de MboxrdStorageWriter klasse en geef de bovenstaande stream door aan de constructor.
  3. Bereid een nieuw bericht voor met de MailMessage klasse.
  4. Roep de WriteMessage() methode en geef het bovenstaande mee MailMessage instance om het bericht toe te voegen aan de Thunderbird‑opslag.
  5. Sluit alle streams.

De volgende codefragment laat zien hoe u berichten naar de Thunderbird‑mailopslag schrijft.

// 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();

MBOX-opslag splitsen/Het splitsen annuleren

Aspose.Email biedt methoden om Mbox-opslag in kleinere delen te splitsen, waardoor het gemakkelijker wordt om grote e-mailarchieven te verwerken. Afhankelijk van de .NET-versie die u gebruikt, kunnen de beschikbare methoden en hun parameters variëren. Hieronder staan de methoden van de MboxStorageReader klasse die wordt gebruikt voor zowel .NET Framework 4.5 als .NET Core-versies, evenals voor versies lager dan 4.5.

Leden voor .NET Framework 4.5 en .NET Core-versies:

  • SplitInto(long chunkSize, string outputPath, CancellationToken token) - Splitst de Mbox‑opslag in kleinere delen op basis van de opgegeven chunk‑size.

  • Parameters:

    • chunkSize: De geschatte grootte van elk segment in bytes.
    • outputPath: Het mappad waarin de segmenten worden aangemaakt.
    • token: Een CancellationToken die de mogelijke annulering van de bewerking mogelijk maakt.
  • SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Splitst de Mbox‑opslag in kleinere delen met een opgegeven bestandsnaam‑prefix voor elk deel.

  • Parameters:

    • chunkSize: De geschatte grootte van elk segment in bytes.
    • outputPath: Het mappad waarin de segmenten worden aangemaakt.
    • partFileNamePrefix: Het voorvoegsel dat aan de bestandsnaam van elk deel moet worden toegevoegd.
    • token: Een CancellationToken die de mogelijke annulering van de bewerking mogelijk maakt.

Leden voor .NET Framework-versies lager dan 4.5:

De volgende code‑voorbeelden laten zien hoe je een MBOX‑bestand in delen splitst, met een maximum van vijf delen, en een annuleringsmechanisme gebruikt:

.NET Framework 4.5 en .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 onder 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();
};