在 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 文件

以下是用 Java 讀取 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 文件讀取電子郵件的步驟。

以下代碼示例顯示瞭如何使用 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 的信息。此外,如果您有任何問題或疑問,請隨時通過我們的 論壇 告訴我們。

也可以看看