Programmare con Thunderbird
Leggere file MBOX
Mozilla Thunderbird è un client di posta open-source e cross-platform, sviluppato dalla Mozilla Foundation. Memorizza le email nella sua struttura di file, gestendo indici dei messaggi e sottocartelle tramite formati di file proprietari. Aspose.Email può lavorare con le strutture di storage di posta di Thunderbird. Il MboxrdStorageReader la classe consente agli sviluppatori di leggere i messaggi dal file di archiviazione di posta di Mozilla Thunderbird. Questo articolo mostra come leggere i messaggi dall’archivio email di Thunderbird:
- Apri il file di storage di Thunderbird in FileStream.
- Crea un’istanza di MboxrdStorageReader classe e passa il flusso sopra al costruttore.
- Chiama ReadNextMessage() per ottenere il primo messaggio.
- Usa lo stesso ReadNextMessage() in un ciclo while per leggere tutti i messaggi.
- Chiudi tutti i flussi.
Il seguente frammento di codice mostra come leggere tutti i messaggi da uno storage di posta 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();
Recuperare le proprietà del messaggio
MboxMessageInfo la classe contiene le seguenti proprietà per recuperare informazioni su un messaggio:
- DateTime Date - Recupera la data del messaggio
- MailAddress From - Recupera l’indirizzo del mittente
- string Subject - Recupera l’oggetto del messaggio
- MailAddressCollection A - Recupera la collezione di indirizzi che contiene i destinatari del messaggio
- MailAddressCollection CC - Recupera la collezione di indirizzi che contiene i destinatari Cc
- MailAddressCollection Bcc - Recupera la collezione di indirizzi che contiene i destinatari Ccn del messaggio
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}");
}
Estrai messaggi da MBOX per identificatori
Il MboxStorageReader la classe include il EnumerateMessageInfo() metodo, che consente di iterare su ogni messaggio in un file MBOX. Usando questo metodo, è possibile estrarre messaggi individuali senza dover attraversare ripetutamente l’intero storage. Ciò migliora le prestazioni e riduce i tempi di elaborazione.
Il MboxMessageInfo classe fornisce il EntryId proprietà, che fornisce l’accesso a identificatori unici per ogni messaggio nel file MBOX. Questo identificatore può essere memorizzato in un database o usato come riferimento per trovare rapidamente ed estrarre messaggi specifici quando necessario.
Il ExtractMessage(string id) metodo nella MboxStorageReader la classe consente agli sviluppatori di estrarre messaggi basati sul loro EntryId unico. Con il ExtractMessage(string id) metodo, puoi sfruttare l’EntryId memorizzato per recuperare il messaggio corrispondente ed eseguire operazioni aggiuntive su di esso.
Il seguente esempio di codice dimostra come estrarre messaggi da un file MBOX usando gli identificatori:
MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());
foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}
Configurare le opzioni di caricamento durante la lettura dei messaggi da MBOX
Le seguenti funzionalità ti consentiranno di specificare varie opzioni relative al caricamento e all’elaborazione dei messaggi:
-
Proprietà MailStorageConverter.MboxMessageOptions - Ottiene o imposta le opzioni di caricamento email durante l’analisi di uno storage Mbox.
-
Metodo MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) - Il parametro EmlLoadOptions specifica le opzioni durante la lettura di un messaggio dallo storage 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");
Impostazione della Codifica Testo Preferita durante il Caricamento di File Mbox per la Lettura
L’opzione di codifica è disponibile per la classe MboxrdStorageReader. Questo fornisce opzioni aggiuntive per caricare il file mbox e garantisce che i messaggi con contenuto codificato vengano letti e processati correttamente. Il seguente frammento di codice mostra come impostare la codifica del testo che soddisfa le tue esigenze:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Ottenere il numero totale di messaggi dal file MBOX
Il MboxrdStorageReader la classe fornisce la capacità di leggere il numero di elementi disponibili in un file MBox. Questo può essere usato per sviluppare applicazioni che mostrano l’avanzamento dell’attività durante l’elaborazione di tale file.
// 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());
}
Ottieni la dimensione corrente del messaggio
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();
}
}
Conversione da MBOX a PST conservando o rimuovendo una firma
Per rimuovere la firma da un file durante il processo di conversione, impostare il MboxToPstConversionOptions.RemoveSignature proprietà a true.
Il seguente esempio di codice mostra come utilizzare questa proprietà:
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 });
Scrivere file MBOX
Il MboxrdStorageWriter la classe fornisce la capacità di scrivere nuovi messaggi nel file di archiviazione di posta di Thunderbird. Per scrivere messaggi:
- Apri il file di storage di Thunderbird in FileStream.
- Crea un’istanza di MboxrdStorageWriter classe e passa il flusso sopra al costruttore.
- Prepara un nuovo messaggio usando il MailMessage classe.
- Chiama il WriteMessage() metodo e passare quanto sopra MailMessage istanza per aggiungere il messaggio allo storage di Thunderbird.
- Chiudi tutti i flussi.
Il seguente frammento di codice mostra come scrivere messaggi nella memorizzazione di posta di 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();
Dividi archivio MBOX/Annulla l’operazione di divisione
Aspose.Email fornisce metodi per dividere l’archivio Mbox in parti più piccole, facilitando la gestione di grandi archivi di email. A seconda della versione .NET che utilizzi, i metodi disponibili e i loro parametri possono variare. Di seguito sono riportati i metodi di MboxStorageReader classe utilizzata sia per le versioni .NET Framework 4.5 che per .NET Core, nonché per le versioni inferiori a 4.5.
Membri per .NET Framework 4.5 e versioni .NET Core:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token) - Divide lo storage Mbox in parti più piccole basate sulla dimensione di chunk specificata.
-
Parametri:
- chunkSize: La dimensione approssimativa di ogni chunk in byte.
- outputPath: Il percorso della cartella dove verranno creati i chunk.
- token: Un CancellationToken che consente la possibile cancellazione dell’operazione.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Divide lo storage Mbox in parti più piccole con un prefisso di nome file specificato per ogni parte.
-
Parametri:
- chunkSize: La dimensione approssimativa di ogni chunk in byte.
- outputPath: Il percorso della cartella dove verranno creati i chunk.
- partFileNamePrefix: Il prefisso da aggiungere al nome file di ogni parte.
- token: Un CancellationToken che consente la possibile cancellazione dell’operazione.
Membri per versioni .NET Framework inferiori a 4.5:
-
SplitInto(long chunkSize, string outputPath) - Divide lo storage Mbox in parti più piccole basate sulla dimensione di chunk specificata.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - Divide lo storage Mbox in parti più piccole con un prefisso di nome file specificato per ogni parte.
-
Cancel() - Interrompe un’operazione di divisione in corso.
I seguenti esempi di codice dimostrano come suddividere un file MBOX in parti limitando il processo a un massimo di cinque parti, utilizzando un meccanismo di cancellazione:
.NET Framework 4.5 e .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 inferiore a 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();
};