Crea un nuovo PST, aggiungi sottocartelle e messaggi

Oltre a analizzare un file PST esistente, Aspose.Email offre la possibilità di creare un file PST da zero. Questo articolo dimostra come creare un file PST di Outlook e aggiungergli una sottocartella.

  1. Creazione di un nuovo file PST.
  2. Cambiare la classe del contenitore di una cartella.
  3. Aggiungere messaggi in bulk con prestazioni migliorate

Usa il PersonalStorage classe per creare un file PST in una posizione su disco locale. Per creare un file PST da zero:

  1. Crea un PST usando il PersonalStorage.create() metodo.
  2. Aggiungi una sottocartella nella radice del file PST accedendo alla cartella Root e quindi chiamando il addSubFolder() metodo.

Il frammento di codice seguente mostra come creare un file PST e aggiungere una sottocartella chiamata Inbox.

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

Creare PST con dimensione superiore a 2Gb usando OutputStream

Gli utenti Aspose.Email possono ottimizzare la cache interna del PST usando il costruttore PersonalStorage:

  • blockSize - La dimensione di blocco ottimale per espandere il buffer della cache (in byte).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

Ridurre la dimensione del messaggio e la dimensione del file PST creato

Aspose.Email offre la possibilità di comprimere il contenuto del corpo, il che può aiutare a ridurre la dimensione del messaggio. Questo può essere particolarmente utile quando si inviano messaggi di grandi dimensioni o si hanno limitazioni di banda o di spazio di archiviazione. A tal fine, la libreria fornisce il parametro di compressione incluso nei seguenti metodi:

Il frammento di codice seguente dimostra come usare la compressione RTF impostando il corpo del messaggio 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);

Creare PersonalStorage basato su stream SeekableByteChannel

Aspose.Email per Java rende possibile lavorare con file Personal Storage (PST) usando java.nio.channels. Consente di creare un’istanza PersonalStorage usando uno stream SeekableByteChannel. Il frammento di codice seguente dimostra come creare un’istanza PersonalStorage basata su uno stream FileChannel, aggiungere una sottocartella chiamata "messageFolder" alla cartella radice e importare messaggi da file nella directory "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()));
        }
    }
}

Cambiare la classe del contenitore di una cartella

A volte è necessario cambiare la classe di una cartella. Un esempio comune è quando messaggi di tipo diverso (appuntamenti, messaggi, ecc.) vengono aggiunti alla stessa cartella. In questi casi, la classe della cartella deve essere cambiata per tutti gli elementi affinché vengano visualizzati correttamente. Il seguente frammento di codice mostra come cambiare la classe del contenitore di una cartella in PST a questo scopo.

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

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

Aggiungere messaggi in blocco con prestazioni migliorate

Aggiungere singoli messaggi a un PST implica più operazioni I/O su disco e può rallentare le prestazioni. Per migliorare le prestazioni, i messaggi possono essere aggiunti al PST in modalità bulk per ridurre al minimo le operazioni I/O. Il addMessages(Iterable messages) il metodo consente di aggiungere messaggi in blocco e può essere usato nei seguenti scenari. Inoltre, il MessageAdded evento si verifica quando un messaggio viene aggiunto alla cartella.

Aggiungere messaggi da un altro PST

Per aggiungere messaggi da un altro PST, usa il FolderInfo.enumerateMapiMessages() metodo che restituisce 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());
    }
}

Aggiungere messaggi da directory

Per aggiungere messaggi da una directory, crea il getMessages(String pathToDir) metodo che restituisce 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"));
}