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.

  1. Criando um novo arquivo PST.
  2. Alterando a classe do contêiner de uma pasta.
  3. 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:

  1. Criar um PST usando o PersonalStorage.create() método.
  2. 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:

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 messages) método permite que você adicione mensagens em massa e pode ser usado nos seguintes cenários. Além disso, o MessageAdded evento ocorre quando uma mensagem é adicionada à pasta.

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"));
}