Criar novo PST, adicionar subpastas e mensagens
Além de analisar um arquivo PST existente, o Aspose.Email fornece os meios para criar um arquivo PST do zero. Este artigo demonstra como criar um arquivo PST do Outlook e adicionar uma subpasta a ele.
- Criando um novo arquivo PST.
- Alterando a classe do contêiner de uma pasta.
- Adicionar Mensagens em Massa com Desempenho Aprimorado
Use o PersonalStorage classe para criar um arquivo PST em algum local no disco local. Para criar um arquivo PST do zero:
- Criar um PST usando o PersonalStorage.create() método.
- Adicione uma subpasta na raiz do arquivo PST acessando a pasta Root e então chamando o addSubFolder() método.
O fragmento de código a seguir mostra como criar um arquivo PST e adicionar uma subpasta chamada Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
Criar PST com tamanho maior que 2Gb usando OutputStream
Usuários do Aspose.Email podem otimizar o cache interno do PST usando o construtor PersonalStorage:
- blockSize - O tamanho de bloco ideal para expandir o buffer de cache (em bytes).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Reduzir o tamanho da mensagem e o tamanho do arquivo PST criado
Aspose.Email oferece a capacidade de comprimir o conteúdo do corpo, o que pode ajudar a reduzir o tamanho da mensagem. Isso pode ser particularmente útil ao enviar mensagens grandes ou ao lidar com largura de banda ou restrições de armazenamento limitadas. Para esse propósito, a biblioteca fornece o parâmetro de compressão incluído nos seguintes métodos:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Define o conteúdo do corpo.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Obtém ou define o texto da mensagem formatado em RTF.
O fragmento de código abaixo demonstra como usar a Compressão RTF ao definir o corpo da mensagem 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);
Criar PersonalStorage baseado em Fluxo SeekableByteChannel
Aspose.Email for Java possibilita trabalhar com arquivos de Armazenamento Pessoal (PST) usando java.nio.channels. Ele permite que você crie uma instância de PersonalStorage usando um fluxo SeekableByteChannel. O fragmento de código a seguir demonstra como criar uma instância de PersonalStorage baseada em um fluxo FileChannel, adicionar uma subpasta chamada "messageFolder" à pasta raiz e importar mensagens de arquivos no diretório "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()));
}
}
}
Alterando a Classe do Contêiner da Pasta
Às vezes é necessário mudar a classe de uma pasta. Um exemplo comum é quando mensagens de diferentes tipos (compromissos, mensagens, etc.) são adicionadas à mesma pasta. Nesses casos, a classe da pasta precisa ser alterada para que todos os elementos na pasta sejam exibidos corretamente. O fragmento de código a seguir mostra como mudar a classe do contêiner de uma pasta no PST para esse propósito.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Adicionar Mensagens em Massa com Desempenho Aprimorado
Adicionar mensagens individuais a um PST implica mais operações de I/O ao disco e pode reduzir o desempenho. Para melhorar o desempenho, as mensagens podem ser adicionadas ao PST em modo em massa para minimizar as operações de I/O. O addMessages(Iterable
Adicionar Mensagens de Outro PST
Para adicionar mensagens de outro PST, use o FolderInfo.enumerateMapiMessages() método que retorna 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());
}
}
Adicionar Mensagens de Diretório
Para adicionar mensagens de um diretório, crie o getMessages(String pathToDir) método que retorna 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"));
}