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.
- Creazione di un nuovo file PST.
- Cambiare la classe del contenitore di una cartella.
- 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:
- Crea un PST usando il PersonalStorage.create() metodo.
- 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:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Imposta il contenuto del corpo.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Ottiene o imposta il testo del messaggio formattato RTF.
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
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"));
}