Thunderbird ile Programlama

MBOX Dosyaları Okuma

Mozilla Thunderbird açık kaynaklı, çok platformlu bir e-posta istemcisi olup Mozilla Foundation tarafından geliştirilmiştir. E-postaları kendi dosya yapısında saklar, mesaj indekslerini ve alt klasörleri özel dosya formatlarıyla yönetir. Aspose.Email, Thunderbird posta depolama yapılarıyla çalışabilir. MboxrdStorageReader sınıf, geliştiricilerin Mozilla Thunderbird posta depolama dosyasından mesajları okumasına izin verir. Bu makale, Thunderbird e-posta depolamasından mesajların nasıl okunacağını gösterir:

  1. Thunderbird depolama dosyasını FileStream içinde aç.
  2. Şunun bir örneğini oluştur MboxrdStorageReader sınıf ve yukarıdaki akışı yapıcıya aktar.
  3. Çağırın ReadNextMessage() ilk mesajı almak için.
  4. Aynısını kullanın ReadNextMessage() tüm mesajları okumak için bir while döngüsü içinde.
  5. Tüm akışları kapat.

Aşağıdaki kod snippet’i, bir Thunderbird posta depolamasından tüm mesajları nasıl okuyacağınızı gösterir.

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

Mesaj Özelliklerini Getirme

MboxMessageInfo sınıf, bir mesaj hakkında bilgi almak için aşağıdaki özellikleri içerir:

  • DateTime Date - Mesaj tarihini alır
  • MailAddress From - Gönderen adresini alır
  • string Subject - Mesaj konusunu alır
  • MailAddressCollection To - Mesaj alıcılarını içeren adres koleksiyonunu alır
  • MailAddressCollection CC - CC alıcılarını içeren adres koleksiyonunu alır
  • MailAddressCollection Bcc - Mesajın BCC alıcılarını içeren adres koleksiyonunu alır
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’tan Tanımlayıcılara Göre Mesaj Çıkarma

Bu MboxStorageReader sınıf şunları içerir: EnumerateMessageInfo() yöntem, bir MBOX dosyasındaki her mesajı yinelemenizi sağlar. Bu yöntemi kullanarak, tüm depolamayı tekrar tekrar dolaşmaya gerek kalmadan bireysel mesajları çıkarmak mümkün olur. Bu, performansı artırır ve işlem süresini azaltır.

Bu MboxMessageInfo class, şunları sağlar EntryId özellik, MBOX dosyasındaki her mesaj için benzersiz tanımlayıcılara erişim sağlar. Bu tanımlayıcı bir veritabanında saklanabilir veya gerektiğinde belirli mesajları hızlıca bulup çıkarmak için bir referans olarak kullanılabilir.

Bu ExtractMessage(string id) yöntem, MboxStorageReader sınıf, geliştiricilerin benzersiz EntryId’lerine göre mesajları çıkarmasını sağlar. Bununla birlikte ExtractMessage(string id) yöntemi, depolanan EntryId’yi kullanarak ilgili mesajı alabilir ve onunla ek işlemler yapabilirsiniz.

Aşağıdaki kod örneği, bir MBOX dosyasından mesajları tanımlayıcılar kullanarak nasıl çıkaracağınızı gösterir:

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

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

MBOX’dan Mesaj Okurken Yükleme Seçeneklerini Yapılandırma

Aşağıdaki özellikler, mesajların yüklenmesi ve işlenmesiyle ilgili çeşitli seçenekleri belirlemenizi sağlar:

  • MailStorageConverter.MboxMessageOptions özelliği - Mbox depolaması ayrıştırılırken e-posta yükleme seçeneklerini alır veya ayarlar.

  • MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) yöntemi - EmlLoadOptions parametresi, Mbox depolamasından mesaj okurken seçenekleri belirler.

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 Dosyalarını Okumak İçin Yüklerken Tercih Edilen Metin Kodlamasını Ayarlama

MboxrdStorageReader sınıfı için kodlama seçeneği mevcuttur. Bu, mbox dosyasını yüklemek için ek seçenekler sunar ve kodlanmış içerikli mesajların doğru şekilde okunup işlenmesini sağlar. Aşağıdaki kod parçacığı, ihtiyacınıza uygun metin kodlamasını nasıl ayarlayacağınızı gösterir:

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

MBOX Dosyasından Toplam Mesaj Sayısını Alma

Bu MboxrdStorageReader sınıf, bir MBox dosyasında mevcut olan öğe sayısını okuma yeteneği sağlar. Bu, dosya işlenirken aktivitenin ilerlemesini gösteren uygulamaların geliştirilmesinde kullanılabilir.

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

Mevcut Mesaj Boyutunu Al

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’dan PST’ye Dönüştürürken İmza Koruma ya da Kaldırma

Dönüştürme işlemi sırasında bir dosyadan imzayı kaldırmak için, şunu ayarlayın: MboxToPstConversionOptions.RemoveSignature özelliği true olarak ayarlayın.

Aşağıdaki kod örneği bu özelliğin nasıl kullanılacağını gösterir:

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 Dosyaları Yazma

Bu MboxrdStorageWriter sınıf, yeni mesajları Thunderbird posta depolama dosyasına yazma imkanı sağlar. Mesajları yazmak için:

  1. Thunderbird depolama dosyasını FileStream içinde aç.
  2. Şunun bir örneğini oluştur MboxrdStorageWriter sınıf ve yukarıdaki akışı yapıcıya aktar.
  3. Yeni bir mesajı kullanarak hazırlayın MailMessage sınıf.
  4. Şuğu çağırın WriteMessage() metod ve yukarıdakini aktar MailMessage örnek, mesajı Thunderbird depolamasına eklemek için.
  5. Tüm akışları kapat.

Aşağıdaki kod parçacığı, mesajları Thunderbird posta depolamasına nasıl yazacağınızı gösterir.

// 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 Depolamasını Böl/ Bölme İşlemini İptal Et

Aspose.Email, Mbox depolamasını daha küçük parçalara bölmek için yöntemler sunar, böylece büyük e-posta arşivlerini yönetmek daha kolay olur. Kullandığınız .NET sürümüne bağlı olarak, mevcut yöntemler ve parametreleri değişebilir. Aşağıda yöntemler bulunmaktadır: MboxStorageReader hem .NET Framework 4.5 hem .NET Core sürümleri hem de 4.5 altı sürümler için kullanılan sınıf.

.NET Framework 4.5 ve .NET Core Sürümleri İçin Üyeler:

  • SplitInto(long chunkSize, string outputPath, CancellationToken token) - Mbox depolamasını, belirtilen parça boyutuna göre daha küçük parçalara böler.

  • Parametreler:

    • chunkSize: Her parçanın yaklaşık boyutu (bayt cinsinden).
    • outputPath: Parçaların oluşturulacağı klasör yolu.
    • token: İşlemin olası iptaline izin veren bir CancellationToken.
  • SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Mbox depolamasını, her bir parça için belirtilen dosya adı önekine sahip daha küçük parçalara böler.

  • Parametreler:

    • chunkSize: Her parçanın yaklaşık boyutu (bayt cinsinden).
    • outputPath: Parçaların oluşturulacağı klasör yolu.
    • partFileNamePrefix: Her parçanın dosya adına eklenecek önek.
    • token: İşlemin olası iptaline izin veren bir CancellationToken.

.NET Framework 4.5 Altındaki Sürümler İçin Üyeler:

Aşağıdaki kod örnekleri, bir MBOX dosyasını en fazla beş parçaya bölerek, bir iptal mekanizması kullanarak nasıl böleceğinizi gösterir:

.NET Framework 4.5 ve .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’in Altında:

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