Leia arquivos PST do MS Outlook em Java

PST (Personal Storage Table) é um formato de arquivo bem conhecido que é usado para fins de armazenamento por diferentes programas da Microsoft, como MS Outlook, Exchange e Windows Messaging. Os arquivos PST podem armazenar mensagens, contatos e informações sobre outros itens, como calendários, eventos etc. Em alguns casos, pode ser necessário analisar um arquivo PST e extrair dados dele programaticamente. Para conseguir isso, este artigo mostra como ler arquivos PST do MS Outlook usando Java. Com a ajuda de exemplos de código, você aprenderá como extrair informações de pastas, ler e-mails e buscar contatos de um arquivo PST.

API Java para ler arquivos PST do Outlook

Aspose.Email for Java é uma API de processamento de e-mail popular e rica em recursos para criar e enviar e-mails. Além disso, permite trabalhar com clientes de e-mail populares e formatos de arquivo de armazenamento. Neste artigo, usaremos o Aspose.Email para Java para ler mensagens e outras informações de arquivos PST. Você pode baixar a API ou instalá-la usando as seguintes configurações do Maven.

Repositório:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>

Dependência:

    <groupId>com.aspose</groupId>
    <artifactId>aspose-email</artifactId>
    <version>22.3</version>
    <classifier>jdk16</classifier>
</dependency>

Ler um arquivo PST do Outlook em Java

A seguir estão as etapas para ler um arquivo PST e extrair suas informações.

O exemplo de código a seguir mostra como ler um arquivo PST e buscar as informações das pastas.

// Carregar o arquivo PST do Outlook
PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage.pst");

// Obtenha as informações das pastas
FolderInfoCollection folderInfoCollection = pst.getRootFolder().getSubFolders();

// Navegue por cada pasta para exibir informações
for (int i = 0; i < folderInfoCollection.size(); i++) {
	FolderInfo folderInfo = (FolderInfo) folderInfoCollection.get_Item(i);
	System.out.println("FolderId: " + folderInfo.getEntryIdString());
	System.out.println("Folder: " + folderInfo.getDisplayName());
	System.out.println("Total items: " + folderInfo.getContentCount());
	System.out.println("Total unread items: " + folderInfo.getContentUnreadCount());
	System.out.println("-----------------------------------");
}

Ler e-mails de um arquivo PST em Java

A seguir estão as etapas para ler mensagens de email de um arquivo PST em Java.

O exemplo de código a seguir mostra como extrair mensagens de um arquivo PST em Java.

// Carregar o arquivo PST do Outlook
PersonalStorage pst = PersonalStorage.fromFile(path);

// Obtenha o formato de exibição do arquivo PST
System.out.println("Display Format: " + pst.getFormat());

// Obtenha as informações de pastas e mensagens
FolderInfo folderInfo = pst.getRootFolder();

// Chame o método recursivo para extrair arquivos msg de cada pasta
extractMsgFiles(folderInfo, pst);

// Este é um método recursivo para exibir o conteúdo de uma pasta
private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) {
    // exibir o nome da pasta
    System.out.println("Folder: " + folderInfo.getDisplayName());
    System.out.println("==================================");
    
    // Percorra todas as mensagens nesta pasta
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();
    
    for (MessageInfo messageInfo : messageInfoCollection) {
        System.out.println("Saving message {0} ...." + messageInfo.getSubject());
        
        // Obter a mensagem na instância MapiMessage
        MapiMessage message = pst.extractMessage(messageInfo);
        
        // Salve esta mensagem em disco no formato msg
        message.save(message.getSubject().replace(":", " ") + ".msg");
        
        // Salve esta mensagem para transmitir no formato msg
        ByteArrayOutputStream messageStream = new ByteArrayOutputStream();
        message.save(messageStream);
    }

    // Chame este método recursivamente para cada subpasta
    if (folderInfo.hasSubFolders() == true) {
        for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
            extractMsgFiles(subfolderInfo, pst);
        }
    }
}

Extrair contatos de um arquivo PST em Java

Em certos casos, pode ser necessário extrair as informações dos contatos armazenadas em um arquivo PST. As etapas a seguir mostram como acessar os contatos em um arquivo PST em Java.

O exemplo de código a seguir mostra como extrair contatos de um arquivo PST em Java.

// Carregar o arquivo PST do Outlook
PersonalStorage pst = PersonalStorage.fromFile("SampleContacts.pst");

// Obtenha a pasta de contatos
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Contacts");

// Percorra todos os contatos nesta pasta
MessageInfoCollection messageInfoCollection = folderInfo.getContents();

for (int i = 0; i < messageInfoCollection.size(); i++) {
	MessageInfo messageInfo = (MessageInfo) messageInfoCollection.get_Item(i);
	
  //  Obtenha as informações de contato
	MapiContact contact = (MapiContact) pst.extractMessage(messageInfo).toMapiMessageItem();
	
  //  Exibir alguns conteúdos na tela
	System.out.println("Name: " + contact.getNameInfo().getDisplayName() + "\n");
	
  //  Salvar em disco no formato MSG
	if (contact.getNameInfo().getDisplayName() != null) {
		MapiMessage message = pst.extractMessage(messageInfo); // Get rid of illegal characters that cannot be used as a file name
		String messageName = message.getSubject().replace(":", " ").replace("\\", " ").replace("?", " ").replace("/", " ");
		message.save(messageName + ".msg");
	}
}

Obtenha uma licença de API gratuita

Você pode experimentar o Aspose.Email for Java gratuitamente obtendo uma licença temporária.

Conclusão

Neste artigo, você aprendeu a ler arquivos PST programaticamente em Java. Além disso, você viu como extrair informações de pastas, buscar e-mails e recuperar contatos de um arquivo PST em Java. Além disso, você pode explorar mais sobre o Aspose.Email para Java usando documentação. Além disso, caso você tenha alguma dúvida ou pergunta, sinta-se à vontade para nos informar através do nosso fórum.

Veja também