Nieuwe PST aanmaken, sub‑mappen en berichten toevoegen

Naast het parseren van een bestaand PST‑bestand biedt Aspose.Email de mogelijkheid om een PST‑bestand vanaf nul te maken. Dit artikel laat zien hoe je een Outlook‑PST‑bestand maakt en er een submap aan toevoegt.

  1. Een nieuw PST-bestand maken.
  2. Container‑klasse van een map wijzigen.
  3. Berichten in bulk toevoegen met verbeterde prestaties

Gebruik de PersonalStorage klasse om een PST‑bestand op een locatie op de lokale schijf te maken. Om een PST‑bestand vanaf nul te maken:

  1. Maak een PST aan met de PersonalStorage.create() methode.
  2. Voeg een submap toe aan de root van het PST‑bestand door de Root‑map te benaderen en vervolgens de addSubFolder() methode.

Het volgende code‑fragment laat zien hoe u een PST‑bestand kunt maken en een submap met de naam Inbox kunt toevoegen.

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

PST aanmaken met een grootte groter dan 2 GB via OutputStream

Aspose.Email‑gebruikers kunnen de interne PST‑cache optimaliseren met de PersonalStorage‑constructor:

  • blockSize - De optimale blokgrootte om de cache‑buffer uit te breiden (in bytes).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

Verminder de berichtgrootte en de grootte van het aangemaakte PST‑bestand

Aspose.Email biedt de mogelijkheid om de body‑inhoud te comprimeren, wat kan helpen de berichtgrootte te verkleinen. Dit kan vooral nuttig zijn bij het verzenden van grote berichten of wanneer er beperkte bandbreedte of opslagruimte is. Hiervoor biedt de bibliotheek de compressie‑parameter in de volgende methoden:

Het onderstaande code‑fragment demonstreert het gebruik van RTF‑compressie bij het instellen van de MAPI‑berichtbody:

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

PersonalStorage aanmaken op basis van SeekableByteChannel‑stream

Aspose.Email for Java maakt het mogelijk om met Personal Storage (PST)‑bestanden te werken via java.nio.channels. Het stelt u in staat een PersonalStorage‑instantie te maken met een SeekableByteChannel‑stream. Het volgende code‑fragment toont hoe u een PersonalStorage‑instantie kunt creëren op basis van een FileChannel‑stream, een submap met de naam "messageFolder" kunt toevoegen aan de root‑map en berichten kunt importeren uit bestanden in de "messageFolder"‑directory:

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

Wijzigen van de container‑klasse van een map

Soms is het nodig een mapklasse te wijzigen. Een veelgewoon voorbeeld is wanneer berichten van verschillende typen (afspraken, berichten, enz.) aan dezelfde map worden toegevoegd. In dergelijke gevallen moet de mapklasse voor alle elementen in de map worden aangepast zodat deze correct wordt weergegeven. Het volgende code‑fragment laat zien hoe u de container‑klasse van een map in PST kunt wijzigen voor dit doel.

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

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

Berichten in bulk toevoegen met verbeterde prestaties

Het toevoegen van individuele berichten aan een PST vraagt meer I/O‑operaties naar schijf en kan de prestaties vertragen. Voor betere prestaties kunnen berichten in bulk‑modus aan de PST worden toegevoegd om I/O‑operaties te minimaliseren. De addMessages(Iterable messages) methode stelt u in staat berichten in bulk toe te voegen en kan worden gebruikt in de volgende scenario’s. Bovendien, de MessageAdded evenement treedt op wanneer een bericht aan de map wordt toegevoegd.

Berichten toevoegen uit een andere PST

Om berichten uit een andere PST toe te voegen, gebruik de FolderInfo.enumerateMapiMessages() methode die retourneert 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());
    }
}

Berichten toevoegen uit map

Om berichten uit een map toe te voegen, maak de getMessages(String pathToDir) methode die retourneert 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"));
}