用 Java 读取 MS Outlook PST 文件

PST(个人存储表) 是一种众所周知的文件格式,被不同的 Microsoft 程序(如 MS Outlook、Exchange 和 Windows Messaging)用于存储目的。 PST 文件可以存储消息、联系人和有关其他项目(如日历、事件等)的信息。在某些情况下,您可能需要解析 PST 文件并以编程方式从中提取数据。为此,本文展示了如何在 Java 中读取 Outlook PST 文件。在代码示例的帮助下,您将学习如何提取文件夹信息、阅读电子邮件以及从 PST 文件中获取联系人。

用于处理 Outlook PST 文件的 Java API - 免费下载

Aspose.Email for Java 是一种流行且功能丰富的电子邮件处理 API,用于创建和发送电子邮件。此外,它还允许您使用流行的电子邮件客户端和存储文件格式。在本文中,我们将使用 Aspose.Email for 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>

用 Java 读取 Outlook PST 文件

以下是读取 PST 文件并在 Java 中提取其信息的步骤。

以下代码示例展示了如何在 Java 中读取 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("-----------------------------------");
}

Java 从 PST 读取电子邮件

以下是从 Java 中的 PST 文件读取电子邮件的步骤。

以下代码示例展示了如何从 Java 中的 PST 文件中提取消息。

// 加载 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);
        }
    }
}

从 Java 中的 PST 中读取联系人

在某些情况下,您可能需要提取存储在 PST 文件中的联系人信息。以下步骤显示了如何在 Java 中访问 PST 文件中的联系人。

以下代码示例展示了如何从 Java 中的 PST 文件中提取联系人。

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

用于读取 Outlook PST 文件的 Java API - 获得免费许可证

您可以通过 获得临时许可证 免费试用 Aspose.Email for Java。

结论

在本文中,您学习了如何在 Java 中以编程方式读取 PST 文件。此外,您还了解了如何从 Java 中的 PST 文件中提取文件夹信息、获取电子邮件和检索联系人。此外,您可以使用 文档 探索更多关于 Aspose.Email for Java 的信息。此外,如果您有任何问题或疑问,请随时通过我们的 论坛 告诉我们。

也可以看看