
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 中提取其信息的步骤。
- 使用 PersonalStorage.fromFile() 方法加载 PST 文件。
- 使用 PersonalStorage.getRootFolders().getSubFolders() 方法获取 PST 中的文件夹集合。
- 检索文件夹的信息,例如名称、项目数等。
以下代码示例展示了如何在 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 文件读取电子邮件的步骤。
- 使用 PersonalStorage.fromFile() 方法加载 PST 文件。
- 使用 PersonalStorage.getRootFolder() 方法访问根文件夹。
- 使用 FolderInfo.getContents() 方法从每个子文件夹中获取消息集合。
- 遍历集合中的消息并读取每个消息的字段。
以下代码示例展示了如何从 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 文件中的联系人。
- 使用 PersonalStorage.fromFile() 方法加载 PST 文件。
- 使用 PersonalStorage.getRootFolder().getSubFolder(“Contacts”) 方法获取联系人文件夹的引用。
- 使用 FolderInfo.getContents() 方法获取联系人集合。
- 遍历联系人集合并读取每个联系人或保存它。
以下代码示例展示了如何从 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 的信息。此外,如果您有任何问题或疑问,请随时通过我们的 论坛 告诉我们。