Створити новий PST, додати підпапки та повідомлення
Окрім аналізу існуючого PST файлу, Aspose.Email надає можливість створити PST файл з нуля. У цій статті показано, як створити Outlook PST файл і додати до нього підпапку.
- Створення нового PST файлу.
- Зміна класу контейнера папки.
- Додати повідомлення пакетно з підвищеною продуктивністю
Використайте PersonalStorage клас, щоб створити файл PST у певному розташуванні на локальному диску. Щоб створити файл PST з нуля:
- Створіть PST за допомогою PersonalStorage.create() метод.
- Додайте підпапку у корені файлу PST, отримавши доступ до кореневої папки, а потім викликавши addSubFolder() метод.
Наведений нижче приклад коду показує, як створити файл PST і додати підпапку під назвою Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
Створити PST розміром більше 2 ГБ за допомогою OutputStream
Користувачі Aspose.Email можуть оптимізувати внутрішній кеш PST, використовуючи конструктор PersonalStorage:
- blockSize - Оптимальний розмір блоку для розширення кеш‑буфера (в байтах).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Зменшити розмір повідомлення та розмір створеного файлу PST
Aspose.Email надає можливість стиснення вмісту тіла, що може допомогти зменшити розмір повідомлення. Це особливо корисно під час надсилання великих повідомлень або при обмеженій пропускній здатності чи сховищі. Для цього бібліотека пропонує параметр стиснення, який включено в наступні методи:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Встановлює вміст тіла.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Отримує або встановлює текст повідомлення у форматі RTF.
Нижчеприведений приклад коду демонструє, як використовувати стиснення RTF під час встановлення тіла повідомлення 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);
Створити PersonalStorage на основі потоку SeekableByteChannel
Aspose.Email для Java робить можливим роботу з файлами Personal Storage (PST) за допомогою java.nio.channels. Це дозволяє створити екземпляр PersonalStorage, використовуючи потік SeekableByteChannel. Наведений нижче приклад коду демонструє, як створити екземпляр PersonalStorage на основі потоку FileChannel, додати підпапку з назвою "messageFolder" до кореневої папки та імпортувати повідомлення з файлів у каталозі "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()));
}
}
}
Зміна класу контейнера папки
Іноді необхідно змінити клас папки. Поширений приклад — коли до однієї папки додаються повідомлення різних типів (події, листи тощо). У таких випадках клас папки потрібно змінити для всіх елементів, щоб вони правильно відображалися. Наведений нижче приклад коду показує, як змінити клас контейнера папки в PST для цієї мети.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Додати повідомлення пакетно з підвищеною продуктивністю
Додавання окремих повідомлень у PST передбачає більше операцій вводу/виводу на диск і може сповільнити продуктивність. Для підвищення швидкості повідомлення можна додавати у PST пакетно, щоб мінімізувати операції вводу/виводу. addMessages(Iterable
Додати повідомлення з іншого PST
Щоб додати повідомлення з іншого PST, використовуйте FolderInfo.enumerateMapiMessages() метод, який повертає 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());
}
}
Додати повідомлення з каталогу
Щоб додати повідомлення з каталогу, створіть getMessages(String pathToDir) метод, який повертає 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"));
}