کار با پیام‌ها در یک فایل PST

Contents
[ ]

افزودن پیام‌ها به فایل‌های PST Outlook

افزودن یک پیام تک به فایل PST

ایجاد یک فایل PST جدید و افزودن زیرپوشه‌ها نشان می‌دهد چگونه یک فایل PST ایجاد و زیرپوشه‌ای به آن اضافه کنید. با Aspose.Email می‌توانید پیام‌ها را به زیرپوشه‌های یک فایل PST که ایجاد یا بارگذاری کرده‌اید نیز اضافه کنید. نمونه کد زیر نشان می‌دهد چگونه یک فایل PST جدید ایجاد، پوشه "Inbox" اضافه و سپس یک پیام را به آن پوشه اضافه کنید. این PersonalStorage و FolderInfo کلاس‌ها برای انجام این کار استفاده می‌شوند.

  1. از PersonalStorage.create روشی برای ایجاد یک فایل PST جدید با مشخص‌کردن مسیر فایل و نسخه فرمت فایل به‌صورت یونیکود.
  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 به معنای انجام عملیات I/O بیشتری روی دیسک است و ممکن است سرعت عملکرد را کاهش دهد. برای بهبود عملکرد، می‌توان پیام‌ها را به‌صورت انبوه به PST اضافه کرد و عملیات I/O را به حداقل رساند.

بارگذاری و افزودن پیام‌ها از دیسک

این 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 دیگری کپی کنید:

دریافت پیام‌ها از فایل‌های PST Outlook

در خواندن فایل‌های PST اوتلوک، دریافت اطلاعات پوشه‌ها و زیرپوشه‌ها، ما درباره بارگذاری یک فایل PST Outlook و مرور پوشه‌های آن برای به‌دست آوردن نام پوشه‌ها و تعداد پیام‌های موجود در آن‌ها بحث کردیم. این مقاله توضیح می‌دهد چگونه به پیام‌ها در فایل‌های PST Outlook دسترسی پیدا کنید و آنها را استخراج کنید: دریافت جزئیات پایه پیام، شمارش تعداد موارد در یک پوشه، و استخراج تعداد مشخصی از پیام‌ها برای پردازش یا تحلیل.

دریافت اطلاعات پایه پیام

نمونه کد زیر نشان می‌دهد چگونه اطلاعات کلیدی را از پیام‌های 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)

خواندن بازگشتی پوشه‌های تو در تو

یک فایل PST Outlook ممکن است شامل پوشه‌های تو در تو باشد. برای دریافت اطلاعات پیام‌ها از این پوشه‌ها، علاوه بر پوشه‌های سطح بالا، از یک روش بازگشتی برای خواندن تمام پوشه‌ها استفاده کنید. قطعه کد زیر نشان می‌دهد چگونه یک فایل PST Outlook را بخوانید و محتویات پوشه و پیام‌ها را به‌صورت بازگشتی نمایش دهید:

دریافت تعداد کل آیتم‌ها در یک پوشه 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

فایل‌های ذخیره‌سازی شخصی (PST) می‌توانند حجم زیادی از داده‌ها را شامل شوند و برای یافتن داده‌های مطابق با معیارهای خاص نیاز به فیلترهای متعدد دارند. با PersonalStorageQueryBuilder کلاس، Aspose.Email به شما امکان می‌دهد رکوردهای خاصی را در یک PST بر اساس معیارهای تعریف‌شده جستجو کنید. می‌توانید پیام‌ها را با استفاده از پارامترهایی مانند ارسال‌کننده، گیرنده، موضوع، اهمیت پیام، وجود پیوست‌ها، حجم پیام و حتی شناسه پیام جستجو کنید. علاوه بر این، PersonalStorageQueryBuilder می‌تواند برای جستجو در زیرپوشه‌ها استفاده شود. بخش‌های زیر راهنمایی جامع درباره جستجوی فایل‌های PST Outlook ارائه می‌دهند.

جستجوی پیام‌ها و پوشه‌های 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 overload به شما امکان می‌دهد پیام‌های نوع خاصی مانند فقط ایمیل‌ها، قرار ملاقات‌ها یا مخاطبین را دریافت کنید. نمونه کد زیر نشان می‌دهد چگونه به پیام‌های نوع خاص از یک پوشه معین دسترسی پیدا کرده و آنها را فیلتر کنید:

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)

به‌روزرسانی و سازماندهی محتوای PST اوتلوک

انتقال پیام‌ها بین پوشه‌ها

Aspose.Email امکان انتقال آیتم‌ها از یک پوشه منبع به پوشه دیگری در همان فایل ذخیره‌سازی شخصی (PST) را فراهم می‌کند. این شامل موارد زیر است:

  • انتقال یک پوشه مشخص به یک پوشه والد جدید.
  • انتقال پیام‌های مشخص‌ شده به یک پوشه جدید.
  • انتقال محتواها به یک پوشه جدید.
  • انتقال زیرپوشه‌ها به یک پوشه والد جدید.

قطعه کد زیر نحوه انتقال آیتم‌ها مانند پیام‌ها و پوشه‌ها از یک پوشه منبع به پوشه دیگری در همان فایل PST را نشان می‌دهد.

به‌روزرسانی ویژگی‌های پیام

گاهی لازم است برخی ویژگی‌های پیام‌ها مانند تغییر موضوع، علامت‌گذاری اهمیت پیام و موارد دیگر را تغییر دهید. به‌روزرسانی این ویژگی‌ها در یک فایل PST می‌تواند با استفاده از FolderInfo.change_messages متد ارائه‌شده توسط Aspose.Email برای 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()

حذف پیام‌ها و پوشه‌ها از فایل‌های PST اوتلوک

مدیریت محتوای فایل‌های PST اوتلوک اغلب شامل حذف پیام‌ها، پوشه‌ها یا چندین آیتم به‌صورت یکجا می‌شود. Aspose.Email برای Python از طریق .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() متد که لیستی از موارد Entry ID را که به آیتم‌های قابل حذف ارجاع می‌دهند می‌پذیرد. قطعه کد زیر نشان می‌دهد چگونه آیتم‌ها را به‌صورت گروهی از یک فایل PST حذف کنید.

حذف پوشه‌ها از فایل‌های PST

فایل‌های PST اوتلوک ممکن است پوشه‌هایی داشته باشند که دیگر نیازی به آن‌ها نیست. Aspose.Email برای Python از طریق .NET امکان حذف این پوشه‌ها را با انتقال به پوشه Deleted Items (قابل بازیابی) یا حذف دائم آن‌ها فراهم می‌کند. مثال‌های زیر هر دو رویکرد را نشان می‌دهند.

انتقال یک پوشه به Deleted Items (حذف نرم)

این move_item متد از PersonalStorage کلاس اجازه می‌دهد پوشه‌ها بعدها بازیابی شوند، زیرا به‌صورت دائم حذف نمی‌شوند بلکه به پوشه Deleted Items منتقل می‌شوند. قطعه کد زیر نشان می‌دهد چگونه این متد را در یک پروژه پایتون پیاده‌سازی کنید:

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)