Yeni PST Oluştur, Alt Klasörler ve Mesajlar Ekle
Mevcut bir PST dosyasını ayrıştırmanın yanı sıra, Aspose.Email sıfırdan bir PST dosyası oluşturma imkanı sağlar. Bu makale, bir Outlook PST dosyasının nasıl oluşturulacağını ve ona bir alt klasör ekleyeceğini gösterir.
- Yeni bir PST dosyası oluşturma.
- Bir klasörün kapsayıcı sınıfını değiştirme.
- Performansı Artırarak Toplu Mesaj Ekle
Kullan PersonalStorage sınıfı, yerel bir diskte bir konumda PST dosyası oluşturmak için. Baştan bir PST dosyası oluşturmak için:
- Şu şekilde bir PST oluşturun PersonalStorage.create() metod.
- Root klasöre erişerek ve ardından aşağıdaki yöntemi çağırarak PST dosyasının köküne bir alt klasör ekleyin: addSubFolder() metod.
Aşağıdaki kod parçacığı, bir PST dosyası oluşturmayı ve Inbox adlı bir alt klasör eklemeyi gösterir.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
OutputStream kullanarak 2Gb’den büyük PST oluştur
Aspose.Email kullanıcıları, PersonalStorage yapıcısını kullanarak PST iç önbelleğini optimize edebilir:
- blockSize - Önbellek tamponunu genişletmek için optimal blok boyutu (bayt cinsinden).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Mesaj boyutunu ve oluşturulan PST dosyasının boyutunu azalt
Aspose.Email, gövde içeriğini sıkıştırma yeteneği sunar; bu, mesaj boyutunu azaltmaya yardımcı olabilir. Büyük mesajlar gönderirken veya sınırlı bant genişliği ya da depolama koşullarıyla çalışırken özellikle kullanışlıdır. Bu amaçla, kütüphane aşağıdaki yöntemlerde bulunan compression parametresini sağlar:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Gövde içeriğini ayarlar.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - RTF biçimli mesaj metnini alır veya ayarlar.
Aşağıdaki kod parçacığı, MAPI mesaj gövdesi ayarlanırken RTF Sıkıştırma kullanımını gösterir:
MapiMessage msg = new MapiMessage("from@doamin.com", "to@domain.com", "subject", "body");
// set the html body and keep it compressed
// this will reduce the message size
msg.setBodyContent(htmlBody, BodyContentType.Html, true);
SeekableByteChannel Akışına Dayalı PersonalStorage Oluştur
Aspose.Email for Java, java.nio.channels kullanarak Personal Storage (PST) dosyalarıyla çalışmayı mümkün kılar. Bir SeekableByteChannel akışı kullanarak PersonalStorage örneği oluşturabilirsiniz. Aşağıdaki kod örneği, bir FileChannel akışına dayalı PersonalStorage örneği nasıl oluşturulur, kök klasöre "messageFolder" adlı bir alt klasör eklenir ve "messageFolder" dizinindeki dosyalardan mesajlar nasıl içe aktarılır, gösterir:
try (RandomAccessFile raf = new RandomAccessFile("test.pst", "rw")) {
FileChannel channel = raf.getChannel();
try (PersonalStorage pst = PersonalStorage.create(channel, FileFormatVersion.Unicode)) {
FolderInfo messageFolder = pst.getRootFolder().addSubFolder("messageFolder");
for (File f : new File("messageFolder").listFiles()) {
messageFolder.addMessage(MapiMessage.load(f.getAbsolutePath()));
}
}
}
Klasör Kapsayıcı Sınıfını Değiştirme
Bazen bir klasör sınıfının değiştirilmesi gerekir. Yaygın bir örnek, farklı türlerdeki (randevular, mesajlar vb.) mesajların aynı klasöre eklenmesidir. Bu durumlarda, klasör içindeki tüm öğelerin doğru görüntülenmesi için klasör sınıfının değiştirilmesi gerekir. Aşağıdaki kod parçacığı bu amaçla bir PST içindeki klasörün kapsayıcı sınıfını nasıl değiştireceğinizi gösterir.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Performansı Artırarak Toplu Mesaj Ekle
Bireysel mesajları bir PST’ye eklemek daha fazla disk I/O işlemi gerektirir ve performansı yavaşlatabilir. Performansı artırmak için mesajlar, I/O işlemlerini en aza indirmek amacıyla toplu modda PST’ye eklenebilir. addMessages(Iterable
Başka bir PST’den Mesaj Ekle
Başka bir PST’den mesaj eklemek için şunu kullanın: FolderInfo.enumerateMapiMessages() değer döndüren yöntem Iterable<MapiMessage>:
try (PersonalStorage srcPst = PersonalStorage.fromFile("source.pst", false)) {
try (PersonalStorage destPst = PersonalStorage.fromFile("destination.pst")) {
// Get the folder by name
FolderInfo srcFolder = srcPst.getRootFolder().getSubFolder("SomeFolder");
FolderInfo destFolder = destPst.getRootFolder().getSubFolder("SomeFolder");
destFolder.MessageAdded.add(new MessageAddedEventHandler() {
// Handles the MessageAdded event.
public void invoke(Object sender, MessageAddedEventArgs e) {
System.out.println("Added: " + e.getEntryId());
}
});
destFolder.addMessages(srcFolder.enumerateMapiMessages());
}
}
Dizinden Mesaj Ekle
Dizinden mesaj eklemek için şunu oluşturun: getMessages(String pathToDir) değer döndüren yöntem Iterable<MapiMessage>:
// Read messages from directory.
static Iterable<MapiMessage> getMessages (String pathToDir)
{
return Arrays.stream(listDirectory(pathToDir, "*.msg"))
.map(MapiMessage::load).collect(Collectors.toList());
}
try ( PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("SomeFolder");
folder.MessageAdded.add(new MessageAddedEventHandler() {
// Handles the MessageAdded event.
public void invoke(Object sender, MessageAddedEventArgs e) {
System.out.println("Added: " + e.getEntryId());
}
});
folder.addMessages(getMessages("MessageDirectory"));
}