Thunderbird के साथ प्रोग्रामिंग

MBOX फ़ाइलें पढ़ना

Mozilla Thunderbird Thunderbird एक ओपन-सोर्स, क्रॉस-प्लेटफ़ॉर्म ईमेल क्लाइंट है, जिसे Mozilla Foundation ने विकसित किया है। यह अपने स्वयं के फ़ाइल संरचना में ईमेल संग्रहीत करता है, जिसमें संदेश निर्देशांक और सबफ़ोल्डर को स्वामित्व फ़ाइल फ़ॉर्मेट के माध्यम से प्रबंधित किया जाता है। Aspose.Email Thunderbird मेल स्टोरेज संरचनाओं के साथ काम कर सकता है। MboxrdStorageReader कक्षा डेवलपर्स को Mozilla Thunderbird मेल संग्रह फ़ाइल से संदेश पढ़ने की अनुमति देती है। यह लेख दिखाता है कि Thunderbird ईमेल संग्रह से संदेश कैसे पढ़ें:

  1. FileStream में Thunderbird स्टोरेज फ़ाइल खोलें।
  2. का एक इंस्टेंस बनाएं MboxrdStorageReader class और ऊपर दिया गया स्ट्रीम कंस्ट्रक्टर को पास करें।
  3. कॉल करें ReadNextMessage() पहला संदेश प्राप्त करने के लिए।
  4. उसी का उपयोग करें ReadNextMessage() सभी संदेश पढ़ने के लिए while लूप में।
  5. सभी स्ट्रीम बंद करें।

निम्नलिखित कोड स्निपेट दिखाता है कि 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 Date - संदेश की तिथि प्राप्त करता है
  • MailAddress From - प्रेषक (from) पता प्राप्त करता है
  • string Subject - संदेश का विषय प्राप्त करता है
  • 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 class एक 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 कक्षा थंडरबर्ड मेल संग्रह फ़ाइल में नए संदेश लिखने की सुविधा प्रदान करती है। संदेश लिखने के लिए:

  1. FileStream में Thunderbird स्टोरेज फ़ाइल खोलें।
  2. का एक इंस्टेंस बनाएं MboxrdStorageWriter class और ऊपर दिया गया स्ट्रीम कंस्ट्रक्टर को पास करें।
  3. उपयोग करके नया संदेश तैयार करें MailMessage क्लास।
  4. कॉल करें WriteMessage() method और ऊपर दिया गया पास करें MailMessage Thunderbird स्टोरेज में संदेश जोड़ने के लिए इंस्टेंस।
  5. सभी स्ट्रीम बंद करें।

निम्नलिखित कोड स्निपेट दर्शाता है कि थंडरबर्ड मेल संग्रह में संदेश कैसे लिखें।

// 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: प्रत्येक टुकड़े (chunk) का अनुमानित आकार बाइट्स में।
    • outputPath: वह फ़ोल्डर पाथ जहाँ टुकड़े (chunks) बनाए जाएंगे।
    • token: एक CancellationToken जो संचालन को रद्द करने की संभावना प्रदान करता है।
  • SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - प्रत्येक भाग के लिए निर्दिष्ट फ़ाइलनाम प्रिफ़िक्स के साथ Mbox स्टोरेज को छोटे भागों में विभाजित करता है।

  • पैरामीटर:

    • chunkSize: प्रत्येक टुकड़े (chunk) का अनुमानित आकार बाइट्स में।
    • outputPath: वह फ़ोल्डर पाथ जहाँ टुकड़े (chunks) बनाए जाएंगे।
    • partFileNamePrefix: प्रत्येक भाग की फ़ाइलनाम के पहले जोड़ा जाने वाला उपसर्ग।
    • token: एक CancellationToken जो संचालन को रद्द करने की संभावना प्रदान करता है।

.NET Framework 4.5 से नीचे के संस्करणों के सदस्य:

  • SplitInto(long chunkSize, string outputPath) - निर्दिष्ट चंक आकार के आधार पर Mbox स्टोरेज को छोटे भागों में विभाजित करता है।

  • SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - प्रत्येक भाग के लिए निर्दिष्ट फ़ाइलनाम प्रिफ़िक्स के साथ Mbox स्टोरेज को छोटे भागों में विभाजित करता है।

  • Cancel() - चल रहे विभाजन ऑपरेशन को रोकता है।

निम्न कोड नमूने दिखाते हैं कि कैसे MBOX फ़ाइल को भागों में विभाजित किया जाए जबकि प्रक्रिया को अधिकतम पाँच भागों तक सीमित रखा जाए, और एक कैंसलेशन मैकेनिज़्म का उपयोग किया जाए:

.NET फ़्रेमवर्क 4.5 और .NET कोर:

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 फ़्रेमवर्क 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();
};