Работа с сообщениями в PST‑файле

Contents
[ ]

Добавить сообщения в Outlook PST‑файлы

Добавить одно сообщение в PST‑файл

Создать новый файл PST и добавить подпапки показывает, как создать PST‑файл и добавить к нему подпапку. С Aspose.Email вы также можете добавлять сообщения в подпапки PST‑файла, который вы создали или загрузили. Пример кода ниже демонстрирует, как создать новый PST‑файл, добавить папку "Inbox", а затем добавить сообщение в эту папку. PersonalStorage и FolderInfo классы, используемые для выполнения задачи.

  1. Используйте PersonalStorage.create метод для создания нового PST‑файла с указанием пути к файлу и версии формата файла в Unicode.
  2. Создайте новую папку с именем "Inbox" в корневом каталоге PST‑файла.
  3. Добавьте сообщение в только что созданную папку "Inbox", используя add_message метод.
  4. Загрузить сообщение с помощью 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()

Добавление нескольких сообщений в PST‑файлы для повышения производительности

Добавление отдельных сообщений в PST подразумевает больше операций ввода‑вывода на диск, что может замедлить работу. Для повышения производительности сообщения можно добавлять в PST пакетно, минимизируя операции ввода‑вывода.

Загрузка и добавление сообщений с диска

Этот add_messages метод позволяет задать диапазон сообщений, которые будут добавлены в PST‑файл. Пример кода ниже демонстрирует, как добавить несколько сообщений с диска в PST‑файл для повышения производительности:

  1. Определите функцию, создав add_messages_in_bulk_mode с параметрами для имени PST‑файла и папки с сообщениями.
  2. Откройте указанный PST‑файл, используя PersonalStorage.from_file().
  3. Получить подпапку "myInbox" из корневой папки PST.
  4. Добавьте сообщения из указанной папки пакетно, используя folder.add_messages().
  5. Вызвать add_messages_in_bulk_mode() с файлом PST и именем папки в качестве аргументов.
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")

**Использовать MapiMessageEnumerator для пакетных операций

Чтобы упростить массовую обработку сообщений, вы можете реализовать MapiMessageEnumerator класс, который эффективно перебирает сообщения, хранящиеся в указанной папке. Следующий скрипт на Python предоставляет структурированный подход к перечислению и итерации по сообщениям MAPI с помощью библиотеки Aspose.Email. Он определяет два вспомогательных класса:

  • MapiMessageEnumerator для чтения сообщений из каталога,

  • и MapiMessageCollection для управления ими во время пакетных операций.

Этот подход облегчает обход и обработку файлов сообщений 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

Добавить сообщения из другого PST

Для импорта сообщений из одного PST‑файла в другой Aspose.Email предоставляет FolderInfo.enumerate_mapi_messages() метод. Следующий пример кода демонстрирует, как копировать сообщения из папки "Inbox" одного PST‑файла в другой PST‑файл:

Получить сообщения из Outlook PST‑файлов

В Чтение файлов Outlook PST, получение информации о папках и подпапках, мы обсуждали загрузку Outlook PST‑файла и просмотр его папок для получения имён папок и количества сообщений в них. Эта статья объясняет, как получить доступ к сообщениям Outlook PST‑файлов и извлечь их: получить базовые детали сообщения, подсчитать количество элементов в папке и извлечь определённое число сообщений для обработки или анализа.

Получить базовую информацию о сообщении

Пример кода ниже демонстрирует, как извлечь и отобразить ключевую информацию из сообщений MAPI, хранящихся в PST‑файле, с использованием библиотеки Aspose.Email. Он инициализирует PersonalStorage объект из файла "Outlook.pst" получает содержимое корневой папки и перебирает каждое сообщение. Скрипт выводит детали, такие как тема, информация отправителя, адреса получателей, время доставки и тело сообщения, предоставляя всесторонний обзор каждого письма в указанном PST‑файле.

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)

Рекурсивное чтение вложенных папок

Outlook PST‑файл может содержать вложенные папки. Чтобы получить информацию о сообщениях в них, а также в папках верхнего уровня, используйте рекурсивный метод для чтения всех папок. Следующий фрагмент кода показывает, как прочитать Outlook PST‑файл и рекурсивно отобразить содержимое папок и сообщений:

Получить общее количество элементов в папке PST

Чтобы получить общее количество элементов (например, электронных писем, встреч, задач, контактов и т.д.) в хранилище сообщений, используйте метод get_total_items_count() класса MessageStore класс. Он предоставляет удобный способ быстро собрать информацию о размере и объёме данных в хранилище. Следующий фрагмент кода показывает, как получить общее количество элементов из PST‑файла:

import aspose.email as ae

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

count = pst.store.get_total_items_count()

Извлечь определённое количество сообщений

Чтобы извлечь указанное число сообщений из PST‑файла, используйте метод get_contents(start_index, count) класса FolderInfo класс. Он принимает два параметра:

  • start_index — номер начального сообщения, например 10‑е;
  • count — общее количество сообщений для получения.

Получение только необходимого подмножества сообщений за один раз может быть полезным при работе с большими объёмами почтовых данных. Следующий пример кода демонстрирует реализацию этой функции:

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)

Работа с вложениями в PST‑файлах

Извлечь вложения без извлечения полного сообщения

Aspose.Email для Python позволяет извлекать вложения из сообщений PST без необходимости сначала извлекать всё сообщение. Это можно сделать с помощью extract_attachments метод PersonalStorage класс. Ниже приведён фрагмент кода, демонстрирующий, как извлекать вложения, пропуская файлы .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)

Добавлять файлы в виде вложений к сообщениям PST

Microsoft Outlook — мощный инструмент для управления электронными письмами, календарями, задачами, контактами и журналами. Помимо основных функций, он также позволяет добавлять файлы в папки PST, позволяя пользователям вести полную запись связанных документов. Aspose.Email упрощает процесс добавления файлов в папку PST, работая аналогично тому, как он обрабатывает сообщения, контакты, задачи и журнальные записи.

Следующий фрагмент кода показывает, как добавить документ в папку PST с помощью 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", "")

Поиск и фильтрация сообщений в PST‑файлах

Файлы Personal Storage (PST) могут содержать большое количество данных, и для поиска информации, соответствующей определённым критериям, требуется применение множества фильтров. С помощью PersonalStorageQueryBuilder класс, Aspose.Email позволяет искать конкретные записи в PST на основе определённых критериев поиска. Вы можете искать сообщения по параметрам, таким как отправитель, получатель, тема, важность сообщения, наличие вложений, размер сообщения и даже идентификатор сообщения. Кроме того, PersonalStorageQueryBuilder может использоваться для поиска внутри подпапок. Ниже приведены разделы, предоставляющие всестороннее руководство по поиску в Outlook PST‑файлах.

Поиск сообщений и папок Outlook

Следующий фрагмент кода показывает, как использовать PersonalStorageQueryBuilder класс для поиска содержимого в PST на основе различных критериев поиска. Он особенно демонстрирует поиск в PST по:

  • Важность сообщения.
  • Класс сообщения.
  • Наличие вложений.
  • Размер сообщения.
  • Непрочитанные сообщения.
  • Непрочитанные сообщения с вложениями и папки с определённым именем подпапки.
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)

Поиск без учёта регистра

Используя Aspose.Email PersonalStorageQueryBuilder, вы можете задать условия поиска для электронных писем, игнорируя регистр, что обеспечивает более гибкий и удобный поиск. Следующий пример кода демонстрирует, как загрузить PST‑файл, получить доступ к папке "Inbox" и применить нечувствительные к регистру фильтры поиска для нахождения писем по информации об отправителе. Эта возможность особенно полезна при работе с различным написанием регистронезависимых данных.

Поиск тем сообщений по нескольким ключевым словам

Получить конкретные сообщения или элементы из файла персонального хранилища (PST) или хранилища сообщений, реализуя either(query1, query2) метод PersonalStorageQueryBuilder класс. Принимает два параметра, позволяя комбинировать два разных запроса, query1 и query2, и находить тему сообщения, совпадающую с любым из двух указанных слов. Смотрите пример кода ниже:

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}")

Фильтрация электронных писем в PST по конкретным критериям

Получать только сообщения, соответствующие определённому фильтру, например теме, отправителю или дате, используя MailQuery класс. Ниже приведён пример кода, показывающий, как использовать библиотеку Aspose.Email для загрузки PST‑файла и фильтрации сообщений в конкретной папке, в данном случае в папке "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)

Получить сообщения по типу

Aspose.Email MessageKind перегрузка позволяет получать сообщения определённого типа, например только электронные письма, встречи или контакты. Ниже приведён пример кода, показывающий, как получить доступ и отфильтровать определённые типы сообщений из указанной папки:

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)

Постраничный извлечение сообщений для больших PST‑файлов

При работе с папками, содержащими большое количество сообщений, вы можете использовать постраничную загрузку, чтобы загружать сообщения небольшими партиями, используя start_index и count параметры. Ниже приведён пример кода, показывающий, как получить доступ и извлечь определённый диапазон электронных сообщений из PST‑файла, а не все сразу:

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)

Обновить и организовать содержимое Outlook PST

Перемещение сообщений между папками

Aspose.Email позволяет перемещать элементы из исходной папки в другую папку в том же файле Personal Storage (PST). Это включает:

  • Перемещение указанной папки в новую родительскую папку.
  • Перемещение указанных сообщений в новую папку.
  • Перемещение содержимого в новую папку.
  • Перемещение подпапок в новую родительскую папку.

Следующий фрагмент кода показывает, как перемещать элементы, такие как сообщения и папки, из исходной папки в другую папку в том же файле PST.

Обновить свойства сообщения

Иногда требуется изменить определённые свойства сообщений, такие как тема, пометка важности и др. Обновление этих свойств в PST‑файле можно выполнить с помощью FolderInfo.change_messages метод, предоставляемый Aspose.Email for Python. Эта статья демонстрирует процесс массового обновления свойств сообщений, позволяя автоматически изменять их в нескольких сообщениях в PST‑файле. Ниже приведён фрагмент кода, иллюстрирующий, как выполнять массовые обновления различных свойств сообщений.

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)

Изменить пользовательские свойства MAPI

Иногда необходимо идентифицировать и пометить элементы, которые были обработаны в PST‑файле. API Aspose.Email предлагает решение этой задачи с помощью MapiProperty и MapiNamedProperty классы. Эти классы позволяют помечать обработанные элементы, присваивая им пользовательские свойства. Ниже вы найдёте методы, особенно полезные для выполнения этой операции маркировки:

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()

Удалить сообщения и папки из Outlook PST‑файлов

Управление содержимым Outlook PST‑файлов часто требует удаления ненужных сообщений, папок или нескольких элементов одновременно. Aspose.Email for Python via .NET предоставляет эффективные методы для удаления сообщений и папок из PST‑файла, будь то отдельные письма, FolderInfo.delete_child_item() метод, или выполнить массовое удаление, FolderInfo.delete_child_items() метод, для более удобного управления файлами.

Удалить сообщения из PST‑файлов

Aspose.Email предоставляет FolderInfo класс для доступа к определённым папкам в PST‑файле. Пример кода ниже демонстрирует, как использовать этот класс для доступа и удаления сообщений из подпапки Sent ранее загруженного или созданного PST‑файла. Конкретно, он получает количество сообщений и удаляет первый элемент в папке "Sent Items".

  1. Объект PST инициализируется путем открытия файла "Outlook.pst", расположенного в указанном каталоге, с помощью PersonalStorage.from_file().
  2. Папка Sent Items доступна с помощью pst.get_predefined_folder(StandardIpmFolder.SENT_ITEMS).
  3. Затем код получает содержимое папки "Sent Items" с помощью folder.get_contents(), считает их и выводит общее количество сообщений в этой папке.
  4. Код получает доступ к первому сообщению в папке "Sent Items" с помощью msgsColl[0] и удаляет его, используя folder.delete_child_item(msgInfo.entry_id). Эта функция использует идентификатор записи (Entry ID) сообщения для его удаления из папки.

После удаления код снова подсчитывает сообщения в папке "Sent Items" и выводит обновлённое количество.

Удаление элементов из файлов PST

Во многих системах обмена сообщениями или почтовых клиентах каждый элемент (например, письмо, встреча или задача) получает уникальный идентификатор, называемый entry ID. delete_item(entry_id) метод FolderInfo класс принимает этот Entry ID в качестве параметра и удаляет соответствующий элемент из хранилища сообщений. Используйте следующий код для удаления элемента из хранилища:

import aspose.email as ae

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

pst.delete_item(entry_id)

Массовое удаление элементов

API Aspose.Email можно использовать для пакетного удаления элементов из файла PST. Это достигается с помощью delete_child_items() метод, принимающий список Item ID, указывающих элементы, подлежащие удалению. Ниже показан пример кода, демонстрирующий массовое удаление элементов из PST‑файла.

Удалить папки из PST‑файлов

Outlook PST‑файлы могут содержать папки, которые больше не нужны. Aspose.Email for Python via .NET позволяет удалить такие папки либо переместив их в папку Deleted Items (для возможности восстановления), либо окончательно удалив их. Ниже приведены примеры обоих подходов.

Переместить папку в Deleted Items (мягкое удаление)

Этот move_item метод PersonalStorage класс позволяет позже восстанавливать папки, так как они не удаляются окончательно, а перемещаются в папку Deleted Items. Пример кода ниже показывает, как реализовать этот метод в проекте 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)

Преимущество этого метода в том, что удалённую папку можно легко восстановить.

Восстановить папку из Deleted Items

Этот move_item метод позволяет восстановить папку, если она была удалена ошибочно, переместив её обратно из Deleted Items в исходное место.

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

Окончательно удалить папку из Deleted Items

Этот delete_child_item метод можно использовать для любых папок, если нужно немедленно и окончательно удалить подпапку, минуя папку Deleted Items. Пример кода ниже показывает, как полностью удалить папку из Deleted Items, делая восстановление невозможным:

deleted_items_folder.delete_child_item(empty_folder.entry_id)

Окончательно удалить папку немедленно

Если папку необходимо удалить без перемещения в Deleted Items, delete_child_item метод обеспечивает немедленное и постоянное удаление.

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