Utwórz nowy PST, dodaj podfoldery i wiadomości
Oprócz parsowania istniejącego pliku PST, Aspose.Email udostępnia możliwość stworzenia pliku PST od podstaw. Ten artykuł demonstruje, jak utworzyć plik Outlook PST i dodać do niego podfolder.
- Tworzenie nowego pliku PST.
- Zmiana klasy kontenera folderu.
- Dodaj wiadomości hurtowo z ulepszoną wydajnością
Użyj PersonalStorage klasę, aby utworzyć plik PST w określonej lokalizacji na dysku lokalnym. Aby stworzyć plik PST od podstaw:
- Utwórz PST przy użyciu PersonalStorage.create() metoda.
- Dodaj podfolder w katalogu głównym pliku PST, uzyskując dostęp do folderu Root i wywołując addSubFolder() metoda.
Poniższy fragment kodu pokazuje, jak utworzyć plik PST i dodać podfolder o nazwie Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
Utwórz PST o rozmiarze większym niż 2 GB przy użyciu OutputStream
Użytkownicy Aspose.Email mogą optymalizować wewnętrzną pamięć podręczną PST przy użyciu konstruktora PersonalStorage:
- blockSize - Optymalny rozmiar bloku do rozszerzania bufora pamięci podręcznej (w bajtach).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Zmniejsz rozmiar wiadomości i rozmiar utworzonego pliku PST
Aspose.Email oferuje możliwość kompresji treści ciała wiadomości, co może pomóc zmniejszyć rozmiar wiadomości. Może to być szczególnie przydatne przy wysyłaniu dużych wiadomości lub w sytuacjach ograniczonej przepustowości lub pojemności dysku. W tym celu biblioteka udostępnia parametr kompresji zawarty w następujących metodach:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Ustawia zawartość treści.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Pobiera lub ustawia tekst wiadomości sformatowany jako RTF.
Poniższy fragment kodu demonstruje, jak używać kompresji RTF przy ustawianiu treści wiadomości 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);
Utwórz PersonalStorage na podstawie strumienia SeekableByteChannel
Aspose.Email dla Javy umożliwia pracę z plikami Personal Storage (PST) przy użyciu java.nio.channels. Pozwala utworzyć instancję PersonalStorage przy użyciu strumienia SeekableByteChannel. Poniższy fragment kodu demonstruje, jak stworzyć instancję PersonalStorage na podstawie strumienia FileChannel, dodać podfolder o nazwie "messageFolder" do folderu głównego oraz zaimportować wiadomości z plików w katalogu "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()));
}
}
}
Zmiana klasy kontenera folderu
Czasami konieczna jest zmiana klasy folderu. Typowy przykład to sytuacja, gdy wiadomości różnych typów (spotkania, wiadomości itp.) są dodawane do tego samego folderu. W takich przypadkach klasa folderu musi zostać zmieniona dla wszystkich elementów w folderze, aby wyświetlały się poprawnie. Poniższy fragment kodu pokazuje, jak zmienić klasę kontenera folderu w PST w tym celu.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Dodaj wiadomości hurtowo z ulepszoną wydajnością
Dodawanie pojedynczych wiadomości do PST wymaga więcej operacji I/O na dysku i może spowolnić wydajność. W celu zwiększenia wydajności wiadomości mogą być dodawane do PST w trybie hurtowym, aby zminimalizować operacje I/O. addMessages(Iterable
Dodaj wiadomości z innego PST
Aby dodać wiadomości z innego PST, użyj FolderInfo.enumerateMapiMessages() metoda, która zwraca 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());
}
}
Dodaj wiadomości z katalogu
Aby dodać wiadomości z katalogu, utwórz getMessages(String pathToDir) metoda, która zwraca 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"));
}