Чтение файлов MS Outlook PST в Java

PST (Personal Storage Table) – широко известный формат файлов, который используется для хранения различными программами Microsoft, такими как MS Outlook, Exchange и Windows Messaging. Файлы PST могут хранить сообщения, контакты и информацию о других элементах, таких как календари, события и т. д. В некоторых случаях вам может потребоваться проанализировать файл PST и извлечь из него данные программным путем. Для этого в этой статье показано, как читать файлы MS Outlook PST с помощью Java. С помощью примеров кода вы узнаете, как извлекать информацию из папок, читать электронные письма и извлекать контакты из файла PST.

Java API для чтения файлов Outlook PST

Aspose.Email для Java — это популярный и многофункциональный API обработки электронной почты для создания и отправки электронных писем. Кроме того, он позволяет работать с популярными почтовыми клиентами и форматами файлов хранилища. В этой статье мы будем использовать Aspose.Email для Java для чтения сообщений и другой информации из файлов PST. Вы можете либо скачать API, либо установить его, используя следующие конфигурации Maven.

Репозиторий:

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

Зависимость:

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

Чтение файла Outlook PST в Java

Ниже приведены шаги для чтения файла PST и извлечения его информации.

В следующем примере кода показано, как прочитать файл PST и получить информацию о папках.

// Загрузите файл Outlook PST
PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage.pst");

// Получить информацию о папках
FolderInfoCollection folderInfoCollection = pst.getRootFolder().getSubFolders();

// Просмотрите каждую папку для отображения информации
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("-----------------------------------");
}

Чтение электронных писем из файла PST в Java

Ниже приведены шаги для чтения сообщений электронной почты из файла PST в Java.

  • Загрузите файл PST, используя метод PersonalStorage.fromFile().
  • Получите доступ к корневой папке с помощью метода PersonalStorage.getRootFolder().
  • Получить коллекцию сообщений из каждой подпапки с помощью метода FolderInfo.getContents().
  • Прокрутите сообщения в коллекции и прочитайте поля каждого сообщения.

В следующем примере кода показано, как извлекать сообщения из PST-файла в Java.

// Загрузите файл Outlook PST
PersonalStorage pst = PersonalStorage.fromFile(path);

// Получить формат отображения файла PST
System.out.println("Display Format: " + pst.getFormat());

// Получить информацию о папках и сообщениях
FolderInfo folderInfo = pst.getRootFolder();

// Вызов рекурсивного метода для извлечения файлов msg из каждой папки
extractMsgFiles(folderInfo, pst);

// Это рекурсивный метод отображения содержимого папки.
private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) {
    // показать имя папки
    System.out.println("Folder: " + folderInfo.getDisplayName());
    System.out.println("==================================");
    
    // Перебрать все сообщения в этой папке
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();
    
    for (MessageInfo messageInfo : messageInfoCollection) {
        System.out.println("Saving message {0} ...." + messageInfo.getSubject());
        
        // Получить сообщение в экземпляре MapiMessage
        MapiMessage message = pst.extractMessage(messageInfo);
        
        // Сохраните это сообщение на диск в формате msg
        message.save(message.getSubject().replace(":", " ") + ".msg");
        
        // Сохранить это сообщение в поток в формате msg
        ByteArrayOutputStream messageStream = new ByteArrayOutputStream();
        message.save(messageStream);
    }

    // Вызовите этот метод рекурсивно для каждой подпапки
    if (folderInfo.hasSubFolders() == true) {
        for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
            extractMsgFiles(subfolderInfo, pst);
        }
    }
}

Извлечение контактов из файла PST в Java

В некоторых случаях вам может потребоваться извлечь информацию о контактах, хранящуюся в файле PST. Следующие шаги показывают, как получить доступ к контактам в файле PST в Java.

В следующем примере кода показано, как извлечь контакты из файла PST в Java.

// Загрузите файл Outlook PST
PersonalStorage pst = PersonalStorage.fromFile("SampleContacts.pst");

// Получить папку Контакты
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Contacts");

// Перебрать все контакты в этой папке
MessageInfoCollection messageInfoCollection = folderInfo.getContents();

for (int i = 0; i < messageInfoCollection.size(); i++) {
	MessageInfo messageInfo = (MessageInfo) messageInfoCollection.get_Item(i);
	
  //  Получить контактную информацию
	MapiContact contact = (MapiContact) pst.extractMessage(messageInfo).toMapiMessageItem();
	
  //  Отображение некоторого содержимого на экране
	System.out.println("Name: " + contact.getNameInfo().getDisplayName() + "\n");
	
  //  Сохранить на диск в формате 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");
	}
}

Получите бесплатную лицензию API

Вы можете бесплатно попробовать Aspose.Email для Java, получив временную лицензию.

Вывод

В этой статье вы узнали, как программно читать файлы PST на Java. Кроме того, вы видели, как извлекать информацию о папках, получать электронные письма и извлекать контакты из файла PST в Java. Кроме того, вы можете узнать больше об Aspose.Email для Java, используя документацию. Кроме того, если у вас возникнут какие-либо вопросы или вопросы, сообщите нам об этом через наш форум.

Смотрите также