Phân tích cú pháp tệp Outlook PST bằng Python

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

Thư viện Python để phân tích cú pháp tệp PST

Để phân tích cú pháp tệp PST, chúng tôi sẽ sử dụng Aspose.Email dành cho Python. Đây là một thư viện Python mạnh mẽ cho phép bạn triển khai các ứng dụng email giàu tính năng một cách liền mạch. Hơn nữa, nó cho phép bạn làm việc với các định dạng lưu trữ và email phổ biến. Bạn có thể cài đặt thư viện từ PyPI bằng lệnh sau.

> pip install Aspose.Email-for-Python-via-NET

Phân tích cú pháp tệp PST bằng Python

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

  • Tải tệp PST bằng phương thức PersonalStorage.fromfile().
  • Lấy bộ sưu tập thư mục trong PST bằng phương thức PersonalStorage.rootfolder.getsubfolders().
  • Truy xuất thông tin của các thư mục như tên, số lượng mục, v.v.

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

from aspose.email import PersonalStorage

# Tải tệp PST
personalStorage = PersonalStorage.from_file("Outlook.pst")

# Nhận bộ sưu tập của các thư mục
folderInfoCollection = personalStorage.root_folder.get_sub_folders()

# Trích xuất thông tin của các thư mục
for folderInfo in folderInfoCollection:
	print("Folder: " + folderInfo.display_name)
	print("Total Items: " + str(folderInfo.content_count))
	print("Total Unread Items: " + str(folderInfo.content_unread_count))

Trích xuất tin nhắn từ tệp PST bằng Python

Tin nhắn là các thực thể chính được các chương trình Microsoft như MS Outlook lưu trữ trong tệp PST. Vì vậy, hãy xem cách trích xuất thông báo từ tệp PST bằng Python.

  • Tải tệp PST bằng phương thức PersonalStorage.fromfile().
  • Lấy tham chiếu của thư mục mong muốn trong một đối tượng bằng phương thức PersonalStorage.rootfolder.getsubfolder().
  • Nhận bộ sưu tập tin nhắn bằng phương thức getcontents().
  • Lặp lại các thư trong bộ sưu tập và đọc các trường của mỗi thư.

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

from aspose.email import PersonalStorage

# Tải tệp PST
sourcePst = PersonalStorage.from_file("Outlook.pst")

# Chọn thư mục mong muốn
sourceFolder = sourcePst.root_folder.get_sub_folder("Inbox")

# Nhận nội dung trong thư mục
messageInfoCollection = sourceFolder.get_contents()

# Lặp qua các thư trong thư mục
for messageInfo in messageInfoCollection:
        print ("Subject: " + messageInfo.subject)
        print("To: " + messageInfo.display_to)

Trích xuất danh bạ từ tệp PST bằng Python

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 Python.

  • Tải tệp PST bằng phương thức PersonalStorage.fromfile().
  • Lấy tham chiếu của thư mục danh bạ bằng phương pháp getpredefinedfolder (StandardIpmFolder.CONTACTS).
  • Nhận tập hợp các địa chỉ liên hệ bằng cách sử dụng phương thức getcontents().
  • Lặp lại bộ sưu tập và đọc từng liên hệ hoặc lưu nó.

Mẫu mã sau đây cho thấy cách trích xuất địa chỉ liên hệ từ tệp PST bằng Python.

from aspose.email import PersonalStorage, StandardIpmFolder, ContactSaveFormat

# Tải tệp PST
pst = PersonalStorage.from_file("SampleContacts_out.pst")

# Chọn thư mục danh bạ				
folderInfo = pst.get_predefined_folder(StandardIpmFolder.CONTACTS)

# Nhận danh bạ
contactCollection = folderInfo.get_contents()

# Lặp lại bộ sưu tập danh bạ
for  messageInfo in contactCollection:

    # Nhận thông tin liên hệ
    mapi = pst.extract_message(messageInfo)

    contact = mapi.to_mapi_message_item()

    # Hiển thị một số nội dung trên màn hình
    print("Name: " + contact.name_info.display_name)

    # Lưu vào đĩa ở Định dạng MSG
    if contact.name_info.display_name is not None:
        # Lưu liên hệ
        contact.save("Contacts\\" + contact.name_info.display_name + "_out.msg")
        contact.save("Contacts\\" + contact.name_info.display_name + "_out.vcf", ContactSaveFormat.VCARD)

Nhận giấy phép API miễn phí

Bạn có thể dùng thử Aspose.Email for Python 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 phân tích cú pháp tệp PST bằng Python. Hơn nữa, bạn đã thấy cách trích xuất danh bạ và tin nhắn từ tệp PST theo lập trình bằng Python. Ngoài ra, bạn có thể khám phá thêm về Aspose.Email bằng tài liệu. Ngoài ra, bạn có thể chia sẻ câu hỏi hoặc thắc mắc của mình trên diễn đàn của chúng tôi.

Xem thêm