Vytvořit nový PST, přidat podsložky a zprávy

Kromě analýzy existujícího souboru PST poskytuje Aspose.Email možnost vytvořit soubor PST od nuly. Tento článek ukazuje, jak vytvořit Outlook PST soubor a přidat k němu podsložku.

  1. Vytvoření nového souboru PST.
  2. Změna třídy kontejneru složky.
  3. Přidat hromadné zprávy s vylepšeným výkonem

Použijte PersonalStorage třídu pro vytvoření souboru PST na určitém místě na lokálním disku. Pro vytvoření PST souboru od nuly:

  1. Vytvořte PST pomocí PersonalStorage.create() metoda.
  2. Přidejte podsložku do kořene souboru PST přístupem ke kořenové složce a následným voláním addSubFolder() metoda.

Následující úryvek kódu ukazuje, jak vytvořit soubor PST a přidat podsložku nazvanou Inbox.

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

Vytvořit PST větší než 2 GB pomocí OutputStream

Uživatelé Aspose.Email mohou optimalizovat interní mezipaměť PST pomocí konstruktoru PersonalStorage:

  • blockSize – Optimální velikost bloku pro rozšíření vyrovnávací paměti (v bajtech).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

Snížit velikost zprávy a velikost vytvořeného souboru PST

Aspose.Email nabízí možnost komprimovat obsah těla, což může pomoci snížit velikost zprávy. To je obzvláště užitečné při odesílání velkých zpráv nebo při omezené šířce pásma či úložném prostoru. Za tímto účelem knihovna poskytuje parametr komprese zahrnutý v následujících metodách:

Níže uvedený úryvek kódu demonstruje, jak použít RTF kompresi při nastavení těla MAPI zprávy:

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

Vytvořit PersonalStorage na základě streamu SeekableByteChannel

Aspose.Email pro Java umožňuje pracovat se soubory Personal Storage (PST) pomocí java.nio.channels. Umožňuje vytvořit instanci PersonalStorage pomocí streamu SeekableByteChannel. Následující úryvek kódu demonstruje, jak vytvořit instanci PersonalStorage na základě streamu FileChannel, přidat podsložku s názvem "messageFolder" do kořenové složky a importovat zprávy ze souborů v adresáři "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()));
        }
    }
}

Změna třídy kontejneru složky

Někdy je nutné změnit třídu složky. Běžný příklad je, když jsou do stejné složky přidány zprávy různých typů (schůzky, zprávy atd.). V takových případech je třeba změnit třídu složky pro všechny prvky, aby se správně zobrazovaly. Následující úryvek kódu ukazuje, jak změnit třídu kontejneru složky v PST pro tento účel.

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

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

Přidat hromadné zprávy s vylepšeným výkonem

Přidávání jednotlivých zpráv do PST znamená více I/O operací na disk a může zpomalit výkon. Pro zlepšení výkonu lze zprávy do PST přidávat hromadně, aby se minimalizovaly I/O operace. addMessages(Iterable messages) metoda vám umožňuje přidávat zprávy hromadně a může být použita v následujících scénářích. Navíc MessageAdded událost nastává, když je zpráva přidána do složky.

Přidat zprávy z jiného PST

Pro přidání zpráv z jiného PST použijte FolderInfo.enumerateMapiMessages() metoda, která vrací 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());
    }
}

Přidat zprávy z adresáře

Pro přidání zpráv z adresáře vytvořte getMessages(String pathToDir) metoda, která vrací 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"));
}