Làm việc với Tin nhắn trong tệp PST

Contents
[ ]

Thêm Tin Nhắn vào Tệp PST Outlook

Thêm Một Tin Nhắn Đơn vào Tệp PST

Tạo Tệp PST Mới và Thêm Thư Mục Con cho thấy cách tạo tệp PST và thêm một thư mục con vào đó. Với Aspose.Email bạn có thể cũng thêm tin nhắn vào các thư mục con của tệp PST mà bạn đã tạo hoặc tải lên. Mẫu mã dưới đây minh họa cách tạo tệp PST mới, thêm thư mục "Inbox", và sau đó thêm một tin nhắn vào thư mục đó. The PersonalStorageFolderInfo các lớp được sử dụng để thực hiện nhiệm vụ.

  1. Sử dụng PersonalStorage.create phương thức để khởi tạo tệp PST mới, chỉ định đường dẫn tệp và phiên bản định dạng tệp là Unicode.
  2. Tạo một thư mục mới có tên "Inbox" trong thư mục gốc của tệp PST.
  3. Thêm một tin nhắn vào thư mục "Inbox" mới tạo bằng cách sử dụng the add_message phương thức.
  4. Tải tin nhắn bằng cách sử dụng MapiMessage.load.
pst = PersonalStorage.create(dataDir + "AddMessagesToPst_out.pst", FileFormatVersion.UNICODE)

# Add new folder "Inbox"
inboxFolder = pst.root_folder.add_sub_folder("Inbox");

# Add message to Inbox Folder
inboxFolder.add_message(MapiMessage.load(dataDir + "MapiMsgWithPoll.msg"))

pst.dispose()

Thêm Nhiều Tin Nhắn vào Tệp PST để Hiệu Suất Tốt Hơn

Thêm từng tin nhắn riêng lẻ vào PST dẫn đến nhiều thao tác I/O tới đĩa hơn và do đó có thể làm chậm hiệu năng. Để cải thiện hiệu năng, có thể thêm tin nhắn vào PST ở chế độ bulk, giảm thiểu các thao tác I/O.

Tải và Thêm Tin Nhắn từ Đĩa

Cái add_messages phương thức cho phép bạn xác định một dải tin nhắn sẽ được thêm vào tệp PST. Mẫu mã dưới đây minh họa cách thêm nhiều tin nhắn từ đĩa vào tệp PST để cải thiện hiệu năng:

  1. Định nghĩa một hàm bằng cách tạo add_messages_in_bulk_mode với các tham số cho tên tệp PST và thư mục chứa tin nhắn.
  2. Mở tệp PST được chỉ định bằng cách sử dụng PersonalStorage.from_file().
  3. Lấy thư mục con "myInbox" từ thư mục gốc PST.
  4. Thêm tin nhắn từ thư mục được chỉ định theo dạng bulk bằng cách sử dụng folder.add_messages().
  5. Gọi add_messages_in_bulk_mode() với tệp PST và tên thư mục làm đối số.
from aspose.email.storage.pst import PersonalStorage, StandardIpmFolder, FileFormatVersion

def add_messages_in_bulk_mode(file_name, msg_folder_name):
    with PersonalStorage.from_file(file_name) as personal_storage:
        folder = personal_storage.root_folder.get_sub_folder("myInbox")
        folder.add_messages(message_collection(msg_folder_name))

# Add multiple messages from the specified folder to the PST file for improved performance
add_messages_in_bulk_mode("file.pst", "folder_with_messages")

Sử dụng MapiMessageEnumerator cho Các Hoạt Động Hàng Loạt

Để tinh giản quá trình xử lý hàng loạt tin nhắn, bạn có thể triển khai the MapiMessageEnumerator lớp thực hiện việc lặp lại các tin nhắn lưu trong một thư mục được chỉ định một cách hiệu quả. Script Python dưới đây cung cấp cách tiếp cận có cấu trúc để liệt kê và lặp lại các tin nhắn MAPI bằng thư viện Aspose.Email. Nó định nghĩa hai lớp trợ giúp:

  • MapiMessageEnumerator để đọc tin nhắn từ một thư mục,

  • MapiMessageCollection để quản lý chúng trong các thao tác batch.

Cách tiếp cận này tạo điều kiện thuận lợi cho việc duyệt và xử lý các tệp tin nhắn MAPI.

import os
from aspose.email.mapi import MapiMessage

# Define a class to enumerate through MAPI message files in a directory
class MapiMessageEnumerator:
    def __init__(self, path):
        self.files = os.listdir(path)
        self.position = -1

    def __next__(self):
        self.position += 1
        if self.position < len(self.files):
            return MapiMessage.from_file(os.path.join(self.path, self.files[self.position]))
        else:
            raise StopIteration

    def __iter__(self):
        return self

# Define a collection class for managing MAPI messages
class MapiMessageCollection:
    def __init__(self, path):
        self.path = path

    def __iter__(self):
        return MapiMessageEnumerator(self.path)


# Iterate through MAPI messages in a specific directory
msg_folder_name = "\\Files\\msg"

# Initialize a collection with the directory containing message files
message_collection = MapiMessageCollection(msg_folder_name)
for message in message_collection:
    # Process each MAPI message object as needed
    pass

Thêm Tin nhắn từ PST Khác

Để nhập tin nhắn từ một tệp PST sang tệp PST khác, Aspose.Email cung cấp the FolderInfo.enumerate_mapi_messages() phương thức. Mẫu mã dưới đây minh họa cách sao chép tin nhắn từ thư mục "Inbox" trong một tệp PST sang tệp PST khác:

Truy xuất Tin Nhắn từ Tệp PST Outlook

Trong Đọc tệp PST của Outlook, Truy xuất Thông tin Thư mục và Thư mục con, chúng ta đã thảo luận về việc tải tệp PST Outlook và duyệt các thư mục của nó để lấy tên thư mục và số lượng tin nhắn trong đó. Bài viết này giải thích cách truy cập và trích xuất tin nhắn từ tệp PST Outlook: lấy thông tin chi tiết cơ bản của tin nhắn, đếm số mục trong một thư mục, và trích xuất một số lượng tin nhắn cụ thể để xử lý hoặc phân tích.

Truy xuất Thông tin Tin Nhắn Cơ bản

Mẫu mã dưới đây minh họa cách trích xuất và hiển thị thông tin chính từ các tin nhắn MAPI được lưu trong tệp PST bằng thư viện Aspose.Email. Nó khởi tạo một PersonalStorage đối tượng từ tệp "Outlook.pst", lấy nội dung của thư mục gốc và lặp lại qua mỗi tin nhắn. Script in ra các chi tiết như tiêu đề, thông tin người gửi, địa chỉ người nhận, thời gian giao, và nội dung tin nhắn, cung cấp một cái nhìn tổng quan toàn diện về mỗi email trong tệp PST đã chỉ định.

from aspose.email.storage.pst import *
from aspose.email.mapi import MapiMessage

pst = PersonalStorage.from_file("Outlook.pst")

folderInfo = pst.root_folder

messageInfoCollection = folderInfo.get_contents()

for messageInfo in messageInfoCollection:
   mapi = pst.extract_message(messageInfo)

   print("Subject: " + mapi.subject)
   print("Sender name: " + mapi.sender_name)
   print("Sender email address: " + mapi.sender_email_address)
   print("To: ", mapi.display_to)
   print("Cc: ", mapi.display_cc)
   print("Bcc: ", mapi.display_bcc)
   print("Delivery time: ", str(mapi.delivery_time))
   print("Body: " + mapi.body)

Đọc Đệ Quy Các Thư Mục Lồng Nhau

Tệp PST của Outlook có thể chứa các thư mục lồng nhau. Để lấy thông tin tin nhắn từ chúng, cũng như các thư mục cấp cao nhất, hãy sử dụng phương pháp đệ quy để đọc tất cả các thư mục. Đoạn mã dưới đây cho bạn thấy cách đọc tệp PST Outlook và hiển thị nội dung thư mục và tin nhắn một cách đệ quy:

Lấy Tổng Số Mục trong Thư Mục PST

Để truy xuất tổng số mục (như email, cuộc hẹn, công việc, liên hệ, v.v.) có trong kho tin nhắn, sử dụng phương thức get_total_items_count() của the MessageStore lớp. Nó cung cấp cách tiện lợi để nhanh chóng thu thập thông tin về kích thước và khối lượng dữ liệu trong kho. Mẫu mã dưới đây cho thấy cách lấy tổng số mục từ tệp PST:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

count = pst.store.get_total_items_count()

Trích xuất Một Số Tin Nhắn Cụ Thể

Để trích xuất một số lượng tin nhắn xác định từ tệp PST, hãy sử dụng phương thức get_contents(start_index, count) của the FolderInfo lớp. Nó nhận hai tham số:

  • start_index - số thứ tự của tin nhắn bắt đầu, ví dụ thứ 10;
  • count - tổng số tin nhắn cần lấy.

Việc chỉ lấy ra một tập hợp con cần thiết của các tin nhắn mỗi lần có thể hữu ích trong việc quản lý khối lượng lớn dữ liệu email. Mẫu mã dưới đây minh họa cách triển khai tính năng này:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

folder = pst.root_folder.get_sub_folder("Inbox")

# Extracts messages starting from 10th index top and extract total 100 messages
messages = folder.get_contents(10, 100)

Làm việc với Đính Kèm trong Tệp PST

Trích xuất Đính Kèm mà không Trích xuất Toàn Bộ Tin Nhắn

Aspose.Email cho Python cho phép trích xuất tệp đính kèm từ tin nhắn PST mà không cần phải trích xuất toàn bộ tin nhắn trước. Điều này có thể thực hiện bằng cách sử dụng the extract_attachments phương thức của PersonalStorage lớp. Đoạn mã dưới đây minh họa cách trích xuất tệp đính kèm trong khi bỏ qua các tệp .msg:

from aspose.email.storage.pst import PersonalStorage

# Open the PST file 
with PersonalStorage.from_file(data_dir + "my.pst") as personal_storage:
    # Get the "Inbox" subfolder from the root folder in the personal storage
    folder = personal_storage.root_folder.get_sub_folder("Inbox")

    # Iterate over each message entry ID in the Inbox folder
    for message_info in folder.enumerate_messages_entry_id():
        # Extract attachments for the current message
        attachments = personal_storage.extract_attachments(message_info)

        # Check if the message has any attachments
        if attachments.count > 0:
            # Iterate over each attachment in the list
            for attachment in attachments:
                # Ignore attachments that are message files (.msg)
                if attachment.long_file_name and attachment.long_file_name.endswith(".msg"):
                    continue
                # Save the attachment with its original file name
                attachment.save(data_dir + attachment.long_file_name)

Thêm Tệp như Đính Kèm vào Tin Nhắn PST

Microsoft Outlook là công cụ mạnh mẽ để quản lý email, lịch, công việc, liên hệ và nhật ký. Ngoài các chức năng cốt lõi này, nó còn cho phép thêm tệp vào các thư mục PST, giúp người dùng duy trì hồ sơ toàn diện các tài liệu liên quan. Aspose.Email đơn giản hóa quá trình thêm tệp vào thư mục PST, hoạt động tương tự như cách nó xử lý tin nhắn, liên hệ, công việc và nhật ký.

Đoạn mã dưới đây minh họa cách thêm một tài liệu vào thư mục PST bằng Aspose.Email:

from aspose.email.storage.pst import PersonalStorage, FileFormatVersion

# Create a new PST file
personal_storage = PersonalStorage.create(data_dir + "AddFilesToPst_out.pst", FileFormatVersion.UNICODE)

# Add a new folder to store files
folder = personal_storage.root_folder.add_sub_folder("Files")

# Add a file to the PST folder
folder.add_file(data_dir + "FileToBeAddedToPST.txt", "")

Tìm Kiếm và Lọc Tin Nhắn trong Tệp PST

Các tệp Lưu trữ Cá nhân (PST) có thể chứa một lượng lớn dữ liệu, và cần áp dụng nhiều bộ lọc để tìm dữ liệu phù hợp với tiêu chí cụ thể. Với the PersonalStorageQueryBuilder lớp, Aspose.Email cho phép bạn tìm kiếm các bản ghi cụ thể trong PST dựa trên tiêu chí tìm kiếm đã định nghĩa. Bạn có thể tìm kiếm tin nhắn bằng các tham số như người gửi, người nhận, tiêu đề, mức độ quan trọng của tin, sự hiện diện của tệp đính kèm, kích thước tin, và thậm chí ID tin. Ngoài ra, the PersonalStorageQueryBuilder có thể được sử dụng để tìm kiếm trong các thư mục con. Các phần sau cung cấp hướng dẫn toàn diện về việc tìm kiếm trong tệp PST Outlook.

Tìm Kiếm Tin Nhắn và Thư Mục Outlook

Đoạn mã sau cho bạn thấy cách sử dụng PersonalStorageQueryBuilder lớp để tìm kiếm nội dung trong PST dựa trên các tiêu chí tìm kiếm khác nhau. Nó đặc biệt minh họa việc tìm kiếm PST dựa trên:

  • Mức độ quan trọng của tin nhắn.
  • Lớp tin nhắn.
  • Có tệp đính kèm.
  • Kích thước tin nhắn.
  • Tin chưa đọc.
  • Tin nhắn chưa đọc có tệp đính kèm, và các thư mục có tên thư mục con cụ thể.
from aspose.email.mapi import MapiMessageFlags
from aspose.email.storage.pst import PersonalStorage, PersonalStorageQueryBuilder, MapiImportance

with PersonalStorage.from_file(data_dir + "my.pst") as personal_storage:
    folder = personal_storage.root_folder.get_sub_folder("Inbox")
    builder = PersonalStorageQueryBuilder()

    # High importance messages
    builder.importance.equals(2)
    messages = folder.get_contents(builder.get_query())
    print("Messages with High Imp:", messages.count)

    builder = PersonalStorageQueryBuilder()
    builder.message_class.equals("IPM.Note")
    messages = folder.get_contents(builder.get_query())
    print("Messages with IPM.Note:", messages.count)

    builder = PersonalStorageQueryBuilder()
    # Messages with attachments AND high importance
    builder.importance.equals(2)
    builder.has_flags(MapiMessageFlags.HASATTACH)
    messages = folder.get_contents(builder.get_query())
    print("Messages with atts:", messages.count)

    builder = PersonalStorageQueryBuilder()
    # Messages with size > 15 KB
    builder.message_size.greater(15000)
    messages = folder.get_contents(builder.get_query())
    print("Messages size > 15 KB:", messages.count)

    builder = PersonalStorageQueryBuilder()
    # Unread messages
    builder.has_no_flags(MapiMessageFlags.READ)
    messages = folder.get_contents(builder.get_query())
    print("Unread:", messages.count)

    builder = PersonalStorageQueryBuilder()
    # Unread messages with attachments
    builder.has_no_flags(MapiMessageFlags.READ)
    builder.has_flags(MapiMessageFlags.HASATTACH)
    messages = folder.get_contents(builder.get_query())
    print("Unread msgs with atts:", messages.count)

    # Folder with name 'SubInbox'
    builder = PersonalStorageQueryBuilder()
    builder.folder_name.equals("SubInbox")
    folders = folder.get_sub_folders(builder.get_query())
    print("Folder having subfolder:", folders.count)

    builder = PersonalStorageQueryBuilder()
    # Folders with subfolders
    builder.has_subfolders()
    folders = folder.get_sub_folders(builder.get_query())
    print("Folders with subfolders:", folders.count)

Tìm kiếm Không Phân biệt Hoa Thường

Bằng cách sử dụng Aspose.Email PersonalStorageQueryBuilder, bạn có thể chỉ định các điều kiện tìm kiếm cho tin nhắn email trong khi bỏ qua độ nhạy cảm chữ hoa/thường, cho phép trải nghiệm tìm kiếm linh hoạt và thân thiện hơn. Mẫu mã dưới đây minh họa cách tải tệp PST, truy cập thư mục "Inbox", và áp dụng bộ lọc tìm kiếm không phân biệt hoa thường để tìm email dựa trên thông tin người gửi. Tính năng này đặc biệt hữu ích khi xử lý dữ liệu email có sự đa dạng trong việc viết hoa.

Tìm Kiếm Dòng Tiêu Đề Bằng Nhiều Từ Khóa

Lấy các tin nhắn hoặc mục cụ thể từ tệp lưu trữ cá nhân (PST) hoặc kho tin nhắn bằng cách thực hiện either(query1, query2) phương thức của PersonalStorageQueryBuilder lớp. Nó nhận hai tham số cho phép bạn kết hợp hai truy vấn khác nhau, query1 và query2, và tìm tiêu đề tin nhắn khớp với bất kỳ từ nào trong hai từ đã chỉ định. Xem mẫu mã dưới đây:

import aspose.email as ae

builder1 = ae.storage.pst.PersonalStorageQueryBuilder()
builder1.subject.contains("Review") # 'Review' is key word for the search

builder2 = ae.storage.pst.PersonalStorageQueryBuilder()
builder2.subject.contains("Error") # 'Error' is also key word for the search

builder = ae.storage.pst.PersonalStorageQueryBuilder()
# message subjects must contain 'Review' or 'Error' words
builder.either(builder1.get_query(), builder2.get_query())


pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

folder = pst.root_folder.get_sub_folder("Inbox")
messages = folder.get_contents(builder.get_query())

for message in messages:
    print(f"Message: {message.subject}")

Lọc Email trong PST theo Tiêu Chí Cụ Thể

Chỉ lấy các tin nhắn khớp với bộ lọc cụ thể, chẳng hạn tiêu đề, người gửi hoặc ngày, bằng cách sử dụng MailQuery lớp. Mẫu mã sau đây minh họa cách sử dụng thư viện Aspose.Email để tải một tệp PST và lọc tin nhắn trong một thư mục cụ thể, trong trường hợp này là thư mục "Inbox":

import aspose.email as ae

# Load the PST file and access a folder
pst = ae.PersonalStorage.from_file("sample.pst")
inbox = pst.root_folder.get_sub_folder("Inbox")

# Create a MailQuery to filter messages by subject
query_builder = ae.MailQueryBuilder()
query_builder.subject.contains("Invoice")

query = query_builder.get_query()

# Enumerate filtered messages
for info in inbox.enumerate_mapi_messages(query):
    print("Subject:", info.subject)

Lấy Tin Nhắn theo Loại

Aspose.Email MessageKind phương thức overload cho phép bạn lấy tin nhắn của một loại cụ thể, chẳng hạn chỉ email, cuộc hẹn, hoặc danh bạ. Mẫu mã sau đây minh họa cách truy cập và lọc các loại tin nhắn cụ thể từ một thư mục được chỉ định:

import aspose.email as ae

# Load the PST and target folder
pst = ae.PersonalStorage.from_file("sample.pst")
inbox = pst.root_folder.get_sub_folder("Inbox")

# Retrieve only email messages (not calendar items, contacts, etc.)
for info in inbox.enumerate_mapi_messages(ae.MessageKind.MAPI_MESSAGE):
    print("Email Message:", info.subject)

Phân Trang Lấy Tin Nhắn cho Tệp PST Lớn

Khi làm việc với các thư mục chứa số lượng lớn tin nhắn, bạn có thể sử dụng phân trang để tải tin nhắn theo từng phần bằng cách sử dụng start_indexcount các tham số. Mẫu mã sau đây minh họa cách truy cập và lấy một phạm vi cụ thể các email từ tệp PST thay vì toàn bộ chúng cùng một lúc:

import aspose.email as ae

# Load the PST and access the target folder
pst = ae.PersonalStorage.from_file("sample.pst")
inbox = pst.root_folder.get_sub_folder("Inbox")

# Retrieve messages from index 0 to 9
for info in inbox.enumerate_mapi_messages(0, 10):
    print("Paged Message:", info.subject)

Cập Nhật và Tổ Chức Nội Dung PST Outlook

Di chuyển Tin nhắn giữa Các Thư mục

Aspose.Email cho phép di chuyển các mục từ thư mục nguồn sang một thư mục khác trong cùng tệp Personal Storage (PST). Điều này bao gồm:

  • Di chuyển một thư mục được chỉ định đến một thư mục cha mới.
  • Di chuyển các tin nhắn đã chỉ định tới một thư mục mới.
  • Di chuyển nội dung đến một thư mục mới.
  • Di chuyển các thư mục con đến một thư mục cha mới.

Đoạn mã dưới đây cho bạn thấy cách di chuyển các mục như tin nhắn và thư mục từ thư mục nguồn sang một thư mục khác trong cùng tệp PST.

Cập Nhật Thuộc Tính Tin Nhắn

Đôi khi cần phải sửa đổi một số thuộc tính của tin nhắn như thay đổi tiêu đề, đánh dấu mức độ quan trọng và hơn nữa. Việc cập nhật các thuộc tính này trong tệp PST có thể thực hiện bằng cách sử dụng FolderInfo.change_messages phương thức được cung cấp bởi Aspose.Email cho Python. Bài viết này trình bày quy trình cập nhật hàng loạt các thuộc tính tin nhắn, cho phép tự động điều chỉnh trên nhiều tin nhắn trong tệp PST. Dưới đây là một đoạn mã minh họa cách thực hiện cập nhật hàng loạt trên các thuộc tính tin nhắn khác nhau.

from aspose.email.storage.pst import PersonalStorage, PersonalStorageQueryBuilder
from aspose.email.mapi import MapiPropertyTag, MapiProperty, MapiPropertyCollection

pst_file_path = data_dir + "ya4demia04vb.pst"

# Load the Outlook PST file
with PersonalStorage.from_file(pst_file_path) as personal_storage:
    # Get the required subfolder
    inbox = personal_storage.root_folder.get_sub_folder("Inbox")

    # Find messages having From = "someuser@domain.com"
    query_builder = PersonalStorageQueryBuilder()
    query_builder.from_address.contains("someuser@domain.com")

    # Get contents from query
    messages = inbox.get_contents(query_builder.get_query())

    # Save (MessageInfo, EntryIdString) in a list
    change_list = [message_info.entry_id_string for message_info in messages]

    # Compose the new properties
    updated_properties = MapiPropertyCollection()
    updated_properties.add(
        MapiPropertyTag.SUBJECT_W,
        MapiProperty(MapiPropertyTag.SUBJECT_W, "New Subject".encode("utf-16le"))
    )
    updated_properties.add(
        MapiPropertyTag.IMPORTANCE,
        MapiProperty(MapiPropertyTag.IMPORTANCE, bytearray([0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]))
    )

    # Update messages having From = "someuser@domain.com" with new properties
    inbox.change_messages(change_list, updated_properties)

Sửa Đổi Thuộc Tính MAPI Tùy Chỉnh

Đôi khi bạn có thể cần xác định và đánh dấu các mục đã được xử lý trong một tệp PST. API Aspose.Email cung cấp giải pháp cho nhiệm vụ này thông qua việc sử dụng MapiPropertyMapiNamedProperty các lớp. Những lớp này cho phép bạn gắn nhãn cho các mục đã xử lý bằng cách chỉ định các thuộc tính tùy chỉnh cho chúng. Dưới đây, bạn sẽ tìm thấy các phương pháp đặc biệt hữu ích cho việc thực hiện quá trình đánh dấu này:

from uuid import UUID
from aspose.email.storage.pst import PersonalStorage
from aspose.email.mapi import MapiNamedProperty, MapiPropertyCollection
from aspose.email.mapi import MapiPropertyType, MapiProperty, MapiPropertyTag

def generate_named_property_tag(index, data_type):
    return (((0x8000 | index) << 16) | data_type) & 0x00000000FFFFFFFF

def run():
    # Load the Outlook file
    pst_file_path = data_dir + "my.pst"

    with PersonalStorage.from_file(pst_file_path) as personal_storage:
        test_folder = personal_storage.root_folder.get_sub_folder("Inbox")

        # Create the collection of message properties for adding or updating
        new_properties = MapiPropertyCollection()

        # Normal, Custom, and PidLidLogFlags named properties
        mapi_property = MapiProperty(
            MapiPropertyTag.ORG_EMAIL_ADDR_W,
            "test_address@org.com".encode("utf-16le")
        )
        named_property1 = MapiNamedProperty(
            generate_named_property_tag(0, MapiPropertyType.LONG),
            "ITEM_ID",
            UUID("00000000-0000-0000-0000-000000000000"),
            bytearray([0x7B, 0x00, 0x00, 0x00])
        )
        named_property2 = MapiNamedProperty(
            generate_named_property_tag(1, MapiPropertyType.LONG),
            0x0000870C,
            UUID("0006200A-0000-0000-C000-000000000046"),
            bytearray([0x00, 0x00, 0x00, 0x00])
        )
        new_properties.add(named_property1.tag, named_property1)
        new_properties.add(named_property2.tag, named_property2)
        new_properties.add(mapi_property.tag, mapi_property)
        test_folder.change_messages(test_folder.enumerate_messages_entry_id(), new_properties)

# Usage
run()

Xóa Tin Nhắn và Thư Mục khỏi Tệp Outlook PST

Quản lý nội dung của các tệp Outlook PST thường bao gồm việc loại bỏ các tin nhắn, thư mục hoặc nhiều mục không cần thiết cùng một lúc. Aspose.Email cho Python thông qua .NET cung cấp các phương pháp hiệu quả để xóa tin nhắn và thư mục khỏi tệp PST, cho dù bạn cần xóa các email riêng lẻ, FolderInfo.delete_child_item() phương thức, hoặc thực hiện xóa hàng loạt, FolderInfo.delete_child_items() phương thức, để quản lý tệp tốt hơn.

Xóa Tin Nhắn khỏi Tệp PST

Aspose.Email cung cấp FolderInfo lớp để truy cập các thư mục cụ thể trong tệp PST. Mẫu mã dưới đây minh họa cách sử dụng lớp này để truy cập và xóa tin nhắn từ thư mục con Sent của một tệp PST đã được tải hoặc tạo trước. Cụ thể, nó lấy số lượng tin nhắn và xóa mục đầu tiên trong thư mục "Sent Items".

  1. Một đối tượng PST được khởi tạo bằng cách mở tệp "Outlook.pst" nằm trong thư mục đã chỉ định bằng cách sử dụng PersonalStorage.from_file().
  2. Thư mục Sent Items được truy cập bằng cách sử dụng pst.get_predefined_folder(StandardIpmFolder.SENT_ITEMS).
  3. Sau đó, mã lấy nội dung của thư mục "Sent Items" với folder.get_contents(), đếm chúng, và in tổng số tin nhắn trong thư mục này.
  4. Mã truy cập tin nhắn đầu tiên trong thư mục "Sent Items" bằng msgsColl[0] và xóa nó bằng cách sử dụng folder.delete_child_item(msgInfo.entry_id). Hàm này sử dụng Entry ID của tin nhắn để xóa nó khỏi thư mục.

Sau khi xóa, mã lại đếm các tin nhắn trong thư mục "Sent Items" và in số đếm đã cập nhật.

Xóa các mục khỏi tệp PST

Trong nhiều hệ thống nhắn tin hoặc khách hàng email, mỗi mục (như email, cuộc hẹn hoặc công việc) được gán một định danh duy nhất gọi là entry ID. Các delete_item(entry_id) phương thức của FolderInfo lớp nhận Entry ID này như một tham số và loại bỏ mục tương ứng khỏi kho tin nhắn. Sử dụng đoạn mã sau để xóa một mục khỏi kho tin nhắn:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

pst.delete_item(entry_id)

Xóa Nhiều Mục Cùng Lúc

API Aspose.Email có thể được sử dụng để xóa các mục hàng loạt từ tệp PST. Điều này được thực hiện bằng cách sử dụng delete_child_items() phương thức chấp nhận danh sách các mục Entry ID đề cập đến các mục cần xóa. Đoạn mã sau đây cho bạn thấy cách xóa nhiều mục cùng lúc từ tệp PST.

Xóa Thư Mục khỏi Tệp PST

Các tệp Outlook PST có thể chứa các thư mục không còn cần thiết. Aspose.Email cho Python thông qua .NET cho phép bạn xóa các thư mục này bằng cách chuyển chúng tới thư mục Deleted Items (có thể khôi phục) hoặc bằng cách xóa vĩnh viễn. Các ví dụ dưới đây minh họa cả hai cách tiếp cận.

Di Chuyển Thư Mục tới Thùng Rác (Xóa Nhẹ)

Cái move_item phương thức của PersonalStorage lớp cho phép các thư mục được khôi phục sau, vì chúng không bị xóa vĩnh viễn mà chỉ được chuyển tới thư mục Deleted Items. Đoạn mã dưới đây cho thấy cách triển khai phương pháp này vào dự án python:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

deleted_items_folder = pst.get_predefined_folder(ae.storage.pst.StandardIpmFolder.DELETED_ITEMS)
empty_folder = pst.root_folder.get_sub_folder("Empty folder")
some_folder = pst.root_folder.get_sub_folder("Some folder")
pst.move_item(empty_folder, deleted_items_folder)
pst.move_item(some_folder, deleted_items_folder)

Ưu điểm của phương pháp này là thư mục đã xóa có thể được khôi phục dễ dàng.

Khôi Phục Thư Mục từ Thùng Rác

Cái move_item phương thức cho phép bạn khôi phục một thư mục, nếu nó bị xóa nhầm, bằng cách di chuyển nó trở lại từ Deleted Items về vị trí gốc.

some_folder = pst.root_folder.get_sub_folder("Some folder")
pst.move_item(some_folder, pst.root_folder)

Xóa Vĩnh Viễn Thư Mục khỏi Thùng Rác

Cái delete_child_item phương thức có thể được sử dụng cho bất kỳ thư mục nào nếu bạn muốn xóa ngay lập tức và vĩnh viễn một thư mục con, bỏ qua thư mục Deleted Items. Mẫu mã sau đây cho thấy cách xóa hoàn toàn thư mục khỏi Deleted Items, khiến việc khôi phục không thể.

deleted_items_folder.delete_child_item(empty_folder.entry_id)

Xóa Thư Mục Vĩnh Viễn Ngay Lập Tức

Nếu một thư mục cần được xóa mà không chuyển vào Thùng Rác, thì delete_child_item phương thức đảm bảo việc xóa ngay lập tức và vĩnh viễn.

some_folder = pst.root_folder.get_sub_folder("Some folder")
pst.root_folder.delete_child_item(some_folder.entry_id)