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.

  1. Yeni bir PST dosyası oluşturma.
  2. Bir klasörün kapsayıcı sınıfını değiştirme.
  3. 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:

  1. Şu şekilde bir PST oluşturun PersonalStorage.create() metod.
  2. 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:

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 messages) yöntem, mesajları toplu olarak eklemenizi sağlar ve aşağıdaki senaryolarda kullanılabilir. Ayrıca, MessageAdded Bir mesaj klasöre eklendiğinde gerçekleşen olay.

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