תכנות עם Thunderbird
קריאת קבצי MBOX
Mozilla Thunderbird הוא לקוח דוא"ל קוד פתוח, חוצה פלטפורמות, שפותח על ידי Mozilla Foundation. הוא מאחסן הודעות במבנה קבצים משלו, מנהל אינדקסי הודעות ותתי‑תיקיות באמצעות פורמטים קבצים קנייניים. Aspose.Email יכולה לעבוד עם מבני האחסון של Thunderbird. ה‑ MboxrdStorageReader מחלקה מאפשרת למפתחים לקרוא הודעות מקובץ אחסון הדואר של Mozilla Thunderbird. מאמר זה מראה כיצד לקרוא הודעות מאחסון הדואר של Thunderbird:
- פתח את קובץ האחסון של Thunderbird ב-FileStream.
- צור מופע של MboxrdStorageReader המחלקה והעבר את הזרם למעלה לבנאי.
- קרא ReadNextMessage() כדי לקבל את ההודעה הראשונה.
- השתמש באותו ReadNextMessage() במחזור while לקריאת כל ההודעות.
- סגור את כל הזרמים.
קטע הקוד הבא מציג כיצד לקרוא את כל ההודעות מאחסון הדואר של 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();
שחזור מאפייני הודעה
MboxMessageInfo המחלקה מכילה את המאפיינים הבאים לקבלת מידע על הודעה:
- DateTime תאריך - מקבל את תאריך ההודעה
- MailAddress מאת - מקבל את כתובת השולח
- string נושא - מקבל את נושא ההודעה
- MailAddressCollection אל - מקבל את אוסף הכתובות שמכיל את נמעני ההודעה
- MailAddressCollection CC - מקבל את אוסף הכתובות שמכיל נמעני CC
- MailAddressCollection Bcc - מקבל את אוסף הכתובות שמכיל נמעני BCC של ההודעה
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}");
}
חלץ הודעות מ‑MBOX לפי מזהים
ה MboxStorageReader מחלקה כוללת את EnumerateMessageInfo() מתודה, המאפשרת לך לעבור על כל הודעה בקובץ MBOX. באמצעות מתודה זו ניתן לחלץ הודעות בודדות ללא צורך לעבור על כל האחסון בצורה חוזרת. זה משפר את הביצועים ומקצץ את זמן העיבוד.
ה MboxMessageInfo class מספקת את EntryId מאפיין, המספק גישה למזהים ייחודיים של כל הודעה בקובץ MBOX. מזהה זה ניתן לאחסון במסד נתונים או לשימוש כהפניה כדי למצוא ולחלץ הודעות ספציפיות במהירות כאשר נדרש.
ה ExtractMessage(string id) מתודה ב‑ MboxStorageReader מחלקה מאפשרת למפתחים לחלץ הודעות על פי ה‑EntryId הייחודי שלהם. עם ה‑ ExtractMessage(string id) בשיטה, ניתן להשתמש ב‑EntryId השמור כדי לאחזר את ההודעה המתאימה ולבצע פעולות נוספות איתה.
דוגמת הקוד שלהלן מדגימה כיצד לחלץ הודעות מקובץ MBOX באמצעות מזהים:
MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());
foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}
הגדרת אפשרויות הטעינה בעת קריאת הודעות מ‑MBOX
התכונות הבאות יאפשרו לך לציין אפשרויות שונות הקשורות לטעינה ולעיבוד הודעות:
-
מאפיין MailStorageConverter.MboxMessageOptions - מקבל או מגדיר אפשריות טעינת אימייל בעת ניתוח אחסון Mbox.
-
מתודת MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) - הפרמטר EmlLoadOptions מציין אפשריות בעת קריאת הודעה מאחסון 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");
הגדרת קידוד טקסט מועדף בעת טעינת קובצי Mbox לקריאה
אפשרות קידוד זמינה למחלקת MboxrdStorageReader. זה מספק אפשרויות נוספות לטעינת קובץ mbox ומבטיח שהודעות עם תוכן מקודד ייקראו ויעובדו כראוי. קטע הקוד הבא מראה כיצד ניתן להגדיר קידוד טקסט העונה על הצרכים שלך:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
קבלת סך כל ההודעות מקובץ MBOX
ה MboxrdStorageReader מחלקה מספקת את האפשרות לקרוא את מספר הפריטים הזמינים בקובץ MBox. ניתן להשתמש בכך לפיתוח אפליקציות המציגות את התקדמות הפעילות בעת עיבוד קובץ זה.
// 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());
}
קבל את גודל ההודעה הנוכחי
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 ל‑PST תוך שמירה או הסרת חתימה
להסרת החתימה מקובץ בתהליך ההמרה, הגדר את ה‑ MboxToPstConversionOptions.RemoveSignature מאפיין ל‑true.
דוגמת הקוד הבא מראה כיצד להשתמש במאפיין זה:
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
ה MboxrdStorageWriter מחלקה המספקת אפשרות לכתוב הודעות חדשות לקובץ אחסון הדואר של Thunderbird. לכתיבת הודעות:
- פתח את קובץ האחסון של Thunderbird ב-FileStream.
- צור מופע של MboxrdStorageWriter המחלקה והעבר את הזרם למעלה לבנאי.
- הכן הודעה חדשה באמצעות MailMessage מחלקה.
- הפעל את WriteMessage() מתודה והעבר את המעלה MailMessage מופע להוספת ההודעה לאחסון Thunderbird.
- סגור את כל הזרמים.
קטע הקוד הבא מראה כיצד לכתוב הודעות לאחסון הדואר של 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();
פצל אחסון MBOX/בטל את פעולת הפיצול
Aspose.Email מספקת שיטות לפיצול אחסון Mbox לחלקים קטנים יותר, מה שמקל על הטיפול בארכיוני אימייל גדולים. בהתאם לגרסת .NET שבה אתה משתמש, השיטות הזמינות והפרמטרים שלהן עשויים להשתנות. להלן השיטות של MboxStorageReader מחלקה המשמשת הן לגרסאות .NET Framework 4.5 והן לגרסאות .NET Core וכן לגרסאות מתחת ל‑4.5.
חברים לגרסאות .NET Framework 4.5 ו‑.NET Core:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token) - מחלק את אחסון Mbox לחלקים קטנים יותר בהתבסס על גודל החלק המוגדר.
-
פרמטרים:
- chunkSize: הגודל המשוער של כל חלק בבייטים.
- outputPath: נתיב התיקייה שבה ייווצרו החלקים.
- token: CancellationToken המאפשר ביטול אפשרי של הפעולה.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - מחלק את אחסון Mbox לחלקים קטנים יותר עם קידומת שם קובץ מוגדרת לכל חלק.
-
פרמטרים:
- chunkSize: הגודל המשוער של כל חלק בבייטים.
- outputPath: נתיב התיקייה שבה ייווצרו החלקים.
- partFileNamePrefix: הקידומת שתתווסף לשם הקובץ של כל חלק.
- token: CancellationToken המאפשר ביטול אפשרי של הפעולה.
חברים לגרסאות .NET Framework מתחת ל‑4.5:
-
SplitInto(long chunkSize, string outputPath) - מחלק את אחסון Mbox לחלקים קטנים יותר בהתבסס על גודל החלק המוגדר.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - מחלק את אחסון Mbox לחלקים קטנים יותר עם קידומת שם קובץ מוגדרת לכל חלק.
-
Cancel() - מבטל פעולה של פיצול שמתרחשת.
קטעי הקוד הבאים מדגימים כיצד לפצל קובץ MBOX לחלקים תוך מגבלת תהליך למקסימום חמשה חלקים, תוך שימוש במנגנון ביטול:
.NET Framework 4.5 ו‑.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 מתחת ל‑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();
};