Skapa ny PST, lägg till undermappar och meddelanden
Förutom att analysera en befintlig PST-fil erbjuder Aspose.Email möjligheten att skapa en PST-fil från början. Denna artikel visar hur man skapar en Outlook PST-fil och lägger till en undermapp i den.
- Skapa en ny PST-fil.
- Ändra behållarklass för en mapp.
- Lägg till meddelanden i bulk med förbättrad prestanda
Använd PersonalStorage klass för att skapa en PST-fil på någon plats på en lokal disk. För att skapa en PST-fil från grunden:
- Skapa en PST med hjälp av PersonalStorage.create() metod.
- Lägg till en undermapp i rotkatalogen för PST-filen genom att komma åt Rot‑mappen och sedan anropa addSubFolder() metod.
Följande kodexempel visar hur du skapar en PST‑fil och lägger till en undermapp som heter Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
Skapa PST med storlek över 2 GB med OutputStream
Aspose.Email‑användare kan optimera PST:s interna cache med PersonalStorage‑konstruktorn:
- blockSize – den optimala blockstorleken för att expandera cache‑bufferten (i byte).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Minska meddelandestorleken och storleken på den skapade PST-filen
Aspose.Email erbjuder möjlighet att komprimera brödtextens innehåll, vilket kan minska meddelandestorleken. Detta kan vara särskilt användbart vid sändning av stora meddelanden eller när bandbredd eller lagringsutrymme är begränsat. För detta ändamål tillhandahåller biblioteket komprimeringsparametern i följande metoder:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Sätter innehållet i kroppen.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Hämtar eller sätter det RTF‑formaterade meddelandetexten.
Kodexemplet nedan visar hur du använder RTF-komprimering när du sätter MAPI‑meddelandekroppen:
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);
Skapa PersonalStorage baserat på SeekableByteChannel‑ström
Aspose.Email for Java gör det möjligt att arbeta med Personal Storage (PST)-filer med java.nio.channels. Det låter dig skapa en PersonalStorage‑instans med en SeekableByteChannel‑ström. Följande kodexempel visar hur du skapar en PersonalStorage‑instans baserad på en FileChannel‑ström, lägger till en undermapp med namnet "messageFolder" i rotmappen och importerar meddelanden från filer i katalogen "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()));
}
}
}
Ändra en mappbehållarklass
Ibland är det nödvändigt att ändra en mappklass. Ett vanligt exempel är när meddelanden av olika typer (möten, meddelanden osv.) läggs till i samma mapp. I sådana fall måste mappklassen ändras för alla element i mappen för att visas korrekt. Följande kodexempel visar hur du ändrar behållarklassen för en mapp i PST för detta ändamål.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Lägg till meddelanden i bulk med förbättrad prestanda
Att lägga till enskilda meddelanden i en PST innebär fler I/O‑operationer till disk och kan sakta ner prestandan. För förbättrad prestanda kan meddelanden läggas till i PST i bulk‑läge för att minimera I/O‑operationer. addMessages(Iterable
Lägg till meddelanden från en annan PST
För att lägga till meddelanden från en annan PST, använd FolderInfo.enumerateMapiMessages() metod som returnerar 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());
}
}
Lägg till meddelanden från katalog
För att lägga till meddelanden från en katalog, skapa getMessages(String pathToDir) metod som returnerar 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"));
}