Buat PST Baru, Tambahkan Sub-folder dan Pesan

Selain mem-parsing file PST yang ada, Aspose.Email menyediakan cara untuk membuat file PST dari awal. Artikel ini menunjukkan cara membuat file PST Outlook dan menambahkan subfolder ke dalamnya.

  1. Membuat file PST baru.
  2. Mengubah kelas Kontainer folder.
  3. Tambah Pesan Bulk dengan Kinerja yang Ditingkatkan

Gunakan PersonalStorage kelas untuk membuat file PST di lokasi tertentu pada disk lokal. Untuk membuat file PST dari awal:

  1. Buat PST menggunakan PersonalStorage.create() metode.
  2. Tambahkan subfolder di root file PST dengan mengakses folder Root dan kemudian memanggil the addSubFolder() metode.

Potongan kode berikut menunjukkan cara membuat file PST dan menambahkan subfolder bernama Inbox.

// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
    // Add new folder "Test"
    pst.getRootFolder().addSubFolder("Inbox");
}

Buat PST dengan Ukuran lebih dari 2Gb menggunakan OutputStream

Pengguna Aspose.Email dapat mengoptimalkan cache internal PST menggunakan konstruktor PersonalStorage:

  • blockSize - Ukuran blok optimal untuk memperluas buffer cache (dalam byte).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

Kurangi ukuran pesan dan ukuran file PST yang dibuat

Aspose.Email menawarkan kemampuan untuk mengompresi konten body, yang dapat membantu mengurangi ukuran pesan. Ini sangat berguna saat mengirim pesan besar atau ketika berhadapan dengan batasan bandwidth atau penyimpanan. Untuk tujuan ini, perpustakaan menyediakan parameter kompresi yang termasuk dalam metode berikut:

Potongan kode di bawah ini menunjukkan cara menggunakan Kompresi RTF saat mengatur isi pesan MAPI:

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

Buat PersonalStorage berdasarkan Aliran SeekableByteChannel

Aspose.Email untuk Java memungkinkan bekerja dengan file Personal Storage (PST) menggunakan java.nio.channels. Ini memungkinkan Anda membuat instance PersonalStorage menggunakan aliran SeekableByteChannel. Potongan kode berikut menunjukkan cara membuat instance PersonalStorage berdasarkan aliran FileChannel, menambahkan subfolder bernama "messageFolder" ke folder root, dan mengimpor pesan dari file dalam direktori "messageFolder":

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

Mengubah Kelas Kontainer Folder

Kadang-kadang diperlukan mengubah kelas folder. Contoh umum adalah ketika pesan dengan tipe berbeda (janji, pesan, dll.) ditambahkan ke folder yang sama. Dalam kasus tersebut, kelas folder perlu diubah untuk semua elemen di dalam folder agar ditampilkan dengan benar. Potongan kode berikut menunjukkan cara mengubah kelas kontainer folder dalam PST untuk tujuan ini.

try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
    FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");

    folder.changeContainerClass("IPF.Note");
}

Tambahkan Pesan Bulk dengan Kinerja yang Ditingkatkan

Menambahkan pesan secara individu ke PST berarti lebih banyak operasi I/O ke disk dan dapat memperlambat kinerja. Untuk kinerja yang lebih baik, pesan dapat ditambahkan ke PST dalam mode bulk untuk meminimalkan operasi I/O. the addMessages(Iterable messages) metode memungkinkan Anda menambahkan pesan secara bulk dan dapat digunakan dalam skenario berikut. Selain itu, the MessageAdded peristiwa terjadi ketika pesan ditambahkan ke folder.

Tambah Pesan dari PST Lain

Untuk menambahkan pesan dari PST lain, gunakan the FolderInfo.enumerateMapiMessages() metode yang mengembalikan 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());
    }
}

Tambah Pesan dari Direktori

Untuk menambahkan pesan dari direktori, buat the getMessages(String pathToDir) metode yang mengembalikan 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"));
}