Créer un nouveau PST, ajouter des sous‑dossiers et des messages
En plus d’analyser un fichier PST existant, Aspose.Email offre la possibilité de créer un fichier PST à partir de zéro. Cet article montre comment créer un fichier PST Outlook et y ajouter un sous-dossier.
- Création d’un nouveau fichier PST.
- Modification de la classe de conteneur d’un dossier.
- Ajouter des messages en masse avec performance améliorée
Utilisez le PersonalStorage classe pour créer un fichier PST à un emplacement sur le disque local. Pour créer un fichier PST à partir de zéro :
- Créez un PST en utilisant le PersonalStorage.create() méthode.
- Ajouter un sous-dossier à la racine du fichier PST en accédant au dossier Root puis en appelant le addSubFolder() méthode.
L’extrait de code suivant montre comment créer un fichier PST et ajouter un sous-dossier appelé Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
Créer un PST de plus de 2 Go en utilisant OutputStream
Les utilisateurs d’Aspose.Email peuvent optimiser le cache interne du PST en utilisant le constructeur PersonalStorage :
- blockSize - La taille de bloc optimale pour étendre le tampon de cache (en octets).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Réduire la taille du message et la taille du fichier PST créé
Aspose.Email offre la possibilité de compresser le contenu du corps, ce qui peut aider à réduire la taille du message. Cela peut être particulièrement utile lors de l’envoi de gros messages ou lorsqu’il faut gérer des contraintes de bande passante ou de stockage limitées. À cette fin, la bibliothèque fournit le paramètre de compression inclus dans les méthodes suivantes :
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Définit le contenu du corps.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Obtient ou définit le texte du message formaté en RTF.
L’extrait de code ci-dessous montre comment utiliser la compression RTF lors de la définition du corps du message 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);
Créer PersonalStorage à partir d’un flux SeekableByteChannel
Aspose.Email for Java permet de travailler avec des fichiers de stockage personnel (PST) en utilisant java.nio.channels. Il vous permet de créer une instance PersonalStorage à l’aide d’un flux SeekableByteChannel. L’extrait de code suivant montre comment créer une instance PersonalStorage basée sur un flux FileChannel, ajouter un sous-dossier nommé "messageFolder" au dossier racine, et importer des messages à partir de fichiers du répertoire "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()));
}
}
}
Modification de la classe de conteneur d’un dossier
Il est parfois nécessaire de changer la classe d’un dossier. Un exemple courant est lorsqu’il y a des messages de différents types (rendez-vous, messages, etc.) ajoutés au même dossier. Dans ces cas, la classe du dossier doit être modifiée pour que tous les éléments du dossier s’affichent correctement. L’extrait de code suivant montre comment changer la classe de conteneur d’un dossier dans un PST à cette fin.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Ajouter des messages en masse avec performance améliorée
Ajouter des messages individuels à un PST implique davantage d’opérations d’E/S sur le disque et peut ralentir les performances. Pour améliorer les performances, les messages peuvent être ajoutés au PST en mode batch afin de minimiser les opérations d’E/S. Le addMessages(Iterable
Ajouter des messages depuis un autre PST
Pour ajouter des messages depuis un autre PST, utilisez le FolderInfo.enumerateMapiMessages() méthode qui renvoie 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());
}
}
Ajouter des messages depuis un répertoire
Pour ajouter des messages depuis un répertoire, créez le getMessages(String pathToDir) méthode qui renvoie 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"));
}