Thunderbird ile Programlama
MBOX’tan Mesajları 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’in posta depolama dosyasından mesaj okumasına izin verir. Bu makale, Thunderbird e-posta depolamasından mesajların nasıl okunacağını gösterir:
- Thunderbird’in depolama dosyasını FileStream içinde aç.
- Şunun bir örneğini oluştur MboxrdStorageReader sınıf ve yukarıdaki akışı yapıcıya aktar.
- Çağırın ReadNextMessage() ilk mesajı almak için.
- Aynısını kullanın ReadNextMessage() tüm mesajları okumak için bir while döngüsü içinde.
- 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.
//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
MailMessage msg;
String[] fromMarker = {null};
while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
System.out.println(fromMarker[0]);
}
}
}
MBOX’tan Mesaj Okurken Yükleme Seçeneklerini Yapılandırma
Aspose.Email API, mesajları bir MBOX dosyasından okurken aşağıdaki manipülasyonlara izin verir:
TNEF Eklerini Koruyarak MBOX’tan PST’ye Mesaj Dönüştürme
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");
MailStorageConverter.MboxMessageOptions() özellik - Mbox depolamasını ayrıştırırken e-posta yükleme seçeneklerini alır veya ayarlar.
TNEF Eklerini Koruyarak Mesajları Okuma
MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);
MboxrdStorageReader.readNextMessage(EmlLoadOptions options) metod - EmlLoadOptions parametresi, Mbox depolamadan mesaj okurken seçenekleri belirler.
TNEF Eklerini Koruyarak Mesajları Listeleme
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
// do something
}
MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) metod - Mbox depolamadan mesaj okurken EmlLoadOptions belirler.
MBOX’tan Tanımlayıcılara Göre Mesaj Çıkarma
Bazen seçili mesajları tanımlayıcılarıyla çıkarmak gerekir. Örneğin, uygulamanız tanımlayıcıları bir veritabanında saklar ve ihtiyaca göre bir mesajı çıkarır. Bu, her seferinde tüm depolamayı dolaşarak belirli bir mesajı bulmak yerine verimli bir yoldur. MBOX dosyaları için bu özelliği uygulamak üzere Aspose.Email aşağıdaki metodları ve sınıfları sunar:
- MboxMessageInfo sınıf şu ile EntryId özellik - Giriş tanımlayıcısını alır.
- enumerateMessageInfo() metodu MboxStorageReader sınıf - depolamadaki mesajların iterasyonunu destekleyen enumeratörü ortaya çıkarır.
- extractMessage(String id) metodu MboxStorageReader sınıf - MBOX’tan mesajı alır.
Aşağıdaki kod örneği, mesajları tanımlayıcılarıyla MBOX’tan nasıl çıkarılacağını gösterir:
MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());
for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}
Not: Mesaj kimliği (ID) depolama dosyası içinde benzersizdir. Kimlikler Aspose.Email tarafından oluşturulur ve diğer üçüncü taraf MBOX işleme kütüphanelerinde veya uygulamalarda kullanılamaz.
MBOX Dosyalarında E-postaları Filtreleme ve Arama
Aspose.Email for Java, bir sorgu kullanarak MBOX dosyalarındaki mesajları filtreleme veya arama yeteneği sunar. Bu, yalnızca belirli kriterlerle eşleşen mesajların alınmasını sağlar. Böylece büyük MBOX dosyalarıyla çalışırken uygulama performansını ve kullanılabilirliğini artırabilirsiniz.
Aşağıdaki kod örneği, aşağıdaki metodları gerçekleştirerek bu özelliğin nasıl uygulanacağını gösterir:
-
enumerateMessages(MailQuery query)- belirtilen sorguyla eşleşen MailMessage örneklerinin bir enumerable koleksiyonunu döndürür. -
enumerateMessageInfo(MailQuery query)- belirtilen sorguyla eşleşen MboxMessageInfo örneklerinin bir enumerable koleksiyonunu döndürür.
MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());
for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
System.out.println("Subject: " + message.getSubject());
}
MBOX Dosyalarından Sayfalı Mesaj Alımı
Aspose.Email for Java, MBOX dosyalarından sayfalı mesaj alımını destekler. Bu özellik, mesajları daha küçük partiler halinde alarak büyük MBOX dosyalarının verimli şekilde işlenmesini sağlar, bellek tüketimini azaltır ve performansı artırır.
Aşağıdaki kod örneği, aşağıdaki metodları gerçekleştirerek bu özelliğin nasıl uygulanacağını gösterir:
-
enumerateMessages(int startIndex, int count)- verilen bir dizinden başlayarak belirli sayıda MailMessage örneğini getirir. -
enumerateMessageInfo(int startIndex, int count)- verilen bir dizinden başlayarak belirli sayıda MboxMessageInfo örneğini getirir.
MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10
for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
System.out.println("Subject: " + message.getSubject());
}
Mesaj Yazma
Bu MboxrdStorageWriter sınıf, yeni mesajları Thunderbird posta depolama dosyasına yazma imkanı sağlar. Mesajları yazmak için:
- Thunderbird depolama dosyasını FileStream içinde aç.
- Şunun bir örneğini oluştur MboxrdStorageWriter sınıf ve yukarıdaki akışı yapıcıya aktar.
- Yeni bir mesajı kullanarak hazırlayın MailMessage sınıf.
- Şuğu çağırın WriteMessage() metod ve yukarıdakini aktar MailMessage örnek, mesajı Thunderbird depolamasına eklemek için.
- Tüm akışları kapat.
Aşağıdaki kod snippet’i, mesajların Thunderbird posta depolamasına nasıl yazıldığını gösterir.
//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
MailMessage msg = MailMessage.load(dataDir + "Message.msg");
String[] fromMarker = {null};
writer.writeMessage(msg, fromMarker);
System.out.println(fromMarker[0]);
}
}
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.
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}
Mevcut Mesaj Boyutunu Al
FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
MailMessage msg = null;
while ((msg = reader.readNextMessage()) != null) {
//returns the number of bytes read
long currentDataSize = reader.getCurrentDataSize();
System.out.println("Bytes read: " + currentDataSize);
}
}
Mbox Dosyaları Yüklenirken Tercih Edilen Metin Kodlamasını Ayarlama
Bu setPreferredTextEncoding(Charset value) metodu MboxLoadOptions sınıf, mesajlar için tercih edilen kodlamayı alır veya ayarlar. Belirtilen yükleme seçenekleriyle Mbox dosyası için bir okuyucu oluşturun ve kodlanmış içeriğe sahip mesajlarınız doğru şekilde okunup işlenecektir. Aşağıdaki kod örneği bu özelliğin bir projeye nasıl uygulanacağını gösterir:
MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();
Mbox Depolamayı Daha Küçük Parçalara Böl
Aspose.Email, Mbox depolama işlemleri üzerinde daha fazla kontrol sağlamak, büyük dosyaları yönetilebilir parçalara bölmek ve süreç sırasında özel eylemler uygulamak için tasarlanmış aşağıdaki bileşenleri sunar:
- MboxStorageReader.SplitInto(long chunkSize, String outputPath) metod - Mbox depolamasını daha küçük parçalara ayırmanıza olanak tanır, büyük Mbox dosyalarını yönetmeyi ve işlemeyi kolaylaştırır.
MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Önceki yöntemin bir varyasyonu olan bu yöntem, bölünmüş Mbox dosya adları için özel bir önek belirtmenize de izin verir.
MboxStorageReader.setEmlCopyingEventHandler Olayı Bu olay, bir e-posta yeni bir Mbox dosyasına kopyalanmadan önce gerçekleşir. E-postalar işlenmeden önce eylemleri özelleştirebilirsiniz.
MboxStorageReader.setEmlCopiedEventHandler Olayı Bu olay, bir e-posta yeni bir Mbox dosyasına kopyalandıktan sonra gerçekleşir. E-postalar üzerinde son işleme eylemleri yapabilirsiniz.
MboxStorageReader.setMboxFileCreatedEventHandler Olayı Bu olay, yeni bir Mbox dosyası oluşturulduğunda meydana gelir. Dosya oluşturulmasına yanıt vermek için bu olayı işleyebilirsiniz.
MboxStorageReader.setMboxFileFilledEventHandler Olayı, yeni bir Mbox dosyasının e-postalarla doldurulduğu zaman gerçekleşir. Dosyanın e-posta ile doldurulmasına yanıt verebilirsiniz.
NewStorageEventHandler(Object sender, NewStorageEventArgs e) yeni bir depolama dosyası oluşturulduktan veya işlendiğinden sonra gerçekleşen olayları ele almak için kullanılan delegedir.
MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) bir Mime öğesinin kopyalanmasıyla ilgili olayları işlemek için kullanılan delegedir, tipik olarak bir MailMessage nesnesinin bir depolamadan diğerine kopyalandığı senaryolarda kullanılır.
NewStorageEventArgs, yeni bir depolama dosyası oluşturulduktan veya işlendiğinden sonra tetiklenen olaylarda kullanılan argümanları temsil eder.
MimeItemCopyEventArgs, bir MailMessage nesnesinin bir depolamadan diğerine kopyalanmasıyla ilgili olay argümanlarını (kopyalama başlamadan önce veya tamamlandıktan sonra) temsil eder.
Aşağıdaki kod örneği, Mbox dosyalarıyla etkileşimi, bu dosyalarla ilgili olayları yönetmeyi ve Mbox depolamasını daha küçük parçalara bölerek mesaj ve parça sayısını izlemeyi gösterir:
messageCount = 0;
partCount = 0;
// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);
// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
public void invoke(Object sender, NewStorageEventArgs e) {
System.out.println("New Mbox file created: " + e.getFileName());
partCount++;
}
});
mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
public void invoke(Object sender, NewStorageEventArgs e) {
System.out.println("Mbox file filled with messages: " + e.getFileName());
}
});
mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
public void invoke(Object sender, MimeItemCopyEventArgs e) {
System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
messageCount++;
}
});
// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");
// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);