Utwórz nowy PST, dodaj podfoldery i wiadomości

Oprócz parsowania istniejącego pliku PST, Aspose.Email udostępnia możliwość stworzenia pliku PST od podstaw. Ten artykuł demonstruje, jak utworzyć plik Outlook PST i dodać do niego podfolder.

  1. Tworzenie nowego pliku PST.
  2. Zmiana klasy kontenera folderu.
  3. Dodaj wiadomości hurtowo z ulepszoną wydajnością

Użyj PersonalStorage klasę, aby utworzyć plik PST w określonej lokalizacji na dysku lokalnym. Aby stworzyć plik PST od podstaw:

  1. Utwórz PST przy użyciu PersonalStorage.create() metoda.
  2. Dodaj podfolder w katalogu głównym pliku PST, uzyskując dostęp do folderu Root i wywołując addSubFolder() metoda.

Poniższy fragment kodu pokazuje, jak utworzyć plik PST i dodać podfolder o nazwie Inbox.

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

Utwórz PST o rozmiarze większym niż 2 GB przy użyciu OutputStream

Użytkownicy Aspose.Email mogą optymalizować wewnętrzną pamięć podręczną PST przy użyciu konstruktora PersonalStorage:

  • blockSize - Optymalny rozmiar bloku do rozszerzania bufora pamięci podręcznej (w bajtach).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

Zmniejsz rozmiar wiadomości i rozmiar utworzonego pliku PST

Aspose.Email oferuje możliwość kompresji treści ciała wiadomości, co może pomóc zmniejszyć rozmiar wiadomości. Może to być szczególnie przydatne przy wysyłaniu dużych wiadomości lub w sytuacjach ograniczonej przepustowości lub pojemności dysku. W tym celu biblioteka udostępnia parametr kompresji zawarty w następujących metodach:

Poniższy fragment kodu demonstruje, jak używać kompresji RTF przy ustawianiu treści wiadomości 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);

Utwórz PersonalStorage na podstawie strumienia SeekableByteChannel

Aspose.Email dla Javy umożliwia pracę z plikami Personal Storage (PST) przy użyciu java.nio.channels. Pozwala utworzyć instancję PersonalStorage przy użyciu strumienia SeekableByteChannel. Poniższy fragment kodu demonstruje, jak stworzyć instancję PersonalStorage na podstawie strumienia FileChannel, dodać podfolder o nazwie "messageFolder" do folderu głównego oraz zaimportować wiadomości z plików w katalogu "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()));
        }
    }
}

Zmiana klasy kontenera folderu

Czasami konieczna jest zmiana klasy folderu. Typowy przykład to sytuacja, gdy wiadomości różnych typów (spotkania, wiadomości itp.) są dodawane do tego samego folderu. W takich przypadkach klasa folderu musi zostać zmieniona dla wszystkich elementów w folderze, aby wyświetlały się poprawnie. Poniższy fragment kodu pokazuje, jak zmienić klasę kontenera folderu w PST w tym celu.

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

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

Dodaj wiadomości hurtowo z ulepszoną wydajnością

Dodawanie pojedynczych wiadomości do PST wymaga więcej operacji I/O na dysku i może spowolnić wydajność. W celu zwiększenia wydajności wiadomości mogą być dodawane do PST w trybie hurtowym, aby zminimalizować operacje I/O. addMessages(Iterable messages) metoda pozwala na dodawanie wiadomości hurtowo i może być użyta w następujących scenariuszach. Ponadto MessageAdded zdarzenie występuje, gdy wiadomość zostaje dodana do folderu.

Dodaj wiadomości z innego PST

Aby dodać wiadomości z innego PST, użyj FolderInfo.enumerateMapiMessages() metoda, która zwraca 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());
    }
}

Dodaj wiadomości z katalogu

Aby dodać wiadomości z katalogu, utwórz getMessages(String pathToDir) metoda, która zwraca 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"));
}