Đọc tệp MS Outlook PST trong Java

PST (Bảng lưu trữ cá nhân) là một định dạng tệp nổi tiếng được sử dụng cho mục đích lưu trữ bởi các chương trình Microsoft khác nhau như MS Outlook, Exchange và Windows Messaging. Tệp PST có thể lưu trữ tin nhắn, danh bạ và thông tin về các mục khác như lịch, sự kiện, v.v. Trong một số trường hợp, bạn có thể cần phân tích cú pháp tệp PST và trích xuất dữ liệu từ tệp đó theo chương trình. Để đạt được điều đó, bài viết này hướng dẫn cách đọc tệp Outlook PST trong Java. Với sự trợ giúp của các mẫu mã, bạn sẽ học cách trích xuất thông tin của các thư mục, đọc email và tìm nạp địa chỉ liên hệ từ tệp PST.

Java API để xử lý tệp Outlook PST - Tải xuống miễn phí

Aspose.Email dành cho Java là một API xử lý email phổ biến và giàu tính năng để tạo và gửi email. Ngoài ra, nó cho phép bạn làm việc với các ứng dụng email khách và các định dạng tệp lưu trữ phổ biến. Trong bài viết này, chúng tôi sẽ sử dụng Aspose.Email for Java để đọc tin nhắn và thông tin khác từ các tệp PST. Bạn có thể tải xuống API hoặc cài đặt nó bằng cách sử dụng các cấu hình Maven sau.

Kho:

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

Sự phụ thuộc:

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

Đọc tệp Outlook PST trong Java

Sau đây là các bước để đọc tệp PST và trích xuất thông tin của nó trong Java.

Mẫu mã sau đây cho thấy cách đọc tệp PST và tìm nạp thông tin của các thư mục trong Java.

// Tải tệp Outlook PST
PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage.pst");

// Nhận thông tin thư mục
FolderInfoCollection folderInfoCollection = pst.getRootFolder().getSubFolders();

// Duyệt qua từng thư mục để hiển thị thông tin
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 đọc email từ PST

Sau đây là các bước để đọc email từ tệp PST trong Java.

Mẫu mã sau đây cho thấy cách trích xuất thông báo từ tệp PST trong Java.

// Tải tệp Outlook PST
PersonalStorage pst = PersonalStorage.fromFile(path);

// Nhận Định dạng hiển thị của tệp PST
System.out.println("Display Format: " + pst.getFormat());

// Nhận thông tin thư mục và tin nhắn
FolderInfo folderInfo = pst.getRootFolder();

// Gọi phương thức đệ quy để trích xuất các tệp tin từ mỗi thư mục
extractMsgFiles(folderInfo, pst);

// Đây là một phương pháp đệ quy để hiển thị nội dung của một thư mục
private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) {
    // hiển thị tên thư mục
    System.out.println("Folder: " + folderInfo.getDisplayName());
    System.out.println("==================================");
    
    // Lặp lại tất cả các thư trong thư mục này
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();
    
   for (MessageInfo messageInfo : messageInfoCollection) {
        System.out.println("Saving message {0} ...." + messageInfo.getSubject());
        
        // Nhận thông báo trong phiên bản MapiMessage
        MapiMessage message = pst.extractMessage(messageInfo);
        
        // Lưu thông báo này vào đĩa ở định dạng tin nhắn
        message.save(message.getSubject().replace(":", " ") + ".msg");
        
        // Lưu tin nhắn này vào luồng ở định dạng tin nhắn
        ByteArrayOutputStream messageStream = new ByteArrayOutputStream();
        message.save(messageStream);
    }

    // Gọi phương thức này một cách đệ quy cho mỗi thư mục con
    if (folderInfo.hasSubFolders() == true) {
       for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
            extractMsgFiles(subfolderInfo, pst);
        }
    }
}

Đọc Danh bạ từ PST trong Java

Trong một số trường hợp nhất định, bạn có thể cần trích xuất thông tin của các liên hệ được lưu trữ trong tệp PST. Các bước sau đây cho biết cách truy cập danh bạ trong tệp PST bằng Java.

Mẫu mã sau đây cho thấy cách trích xuất danh bạ từ tệp PST trong Java.

// Tải tệp Outlook PST
PersonalStorage pst = PersonalStorage.fromFile("SampleContacts.pst");

// Tải thư mục Danh bạ
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Contacts");

// Lặp qua tất cả các địa chỉ liên hệ trong thư mục này
MessageInfoCollection messageInfoCollection = folderInfo.getContents();

for (int i = 0; i < messageInfoCollection.size(); i++) {
	MessageInfo messageInfo = (MessageInfo) messageInfoCollection.get_Item(i);
	
  //  Nhận thông tin liên hệ
	MapiContact contact = (MapiContact) pst.extractMessage(messageInfo).toMapiMessageItem();
	
  //  Hiển thị một số nội dung trên màn hình
	System.out.println("Name: " + contact.getNameInfo().getDisplayName() + "\n");
	
  //  Lưu vào đĩa ở định dạng 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");
	}
}

Java API để đọc tệp Outlook PST - Nhận giấy phép miễn phí

Bạn có thể dùng thử Aspose.Email for Java miễn phí bằng cách nhận giấy phép tạm thời.

Sự kết luận

Trong bài viết này, bạn đã học cách đọc các tệp PST theo chương trình trong Java. Hơn nữa, bạn đã thấy cách trích xuất thông tin thư mục, tìm nạp email và truy xuất danh bạ từ tệp PST trong Java. Ngoài ra, bạn có thể khám phá thêm về Aspose.Email for Java bằng tài liệu. Ngoài ra, trong trường hợp bạn có bất kỳ câu hỏi hoặc thắc mắc nào, vui lòng cho chúng tôi biết qua diễn đàn của chúng tôi.

Xem thêm