Working with Large PST Files

Contents
[ ]

Performance may be degraded when processing large PST files. The following solutions will help you improve the performance of your app when processing large storage files.

from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for message_info in folder.enumerate_messages():
            # Do something with the message
            print(message_info.subject)
from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for message_info in folder.enumerate_messages():
            print(f"Subject: {message_info.subject}")
            print(f"To: {message_info.display_to}")
            print(f"Importance: {message_info.importance}")
            print(f"Message Class: {message_info.message_class}")
from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for entry_id in folder.enumerate_messages_entry_id():
            # Use the id to retrieve a single property (extract_property),
            # extract a MapiMessage (extract_message),
            # extract the message attachments (extract_attachments),
            # or save the message to a stream (save_message_to_stream).
            pass
import base64
from aspose.email.mapi import KnownPropertyList
from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for msg_id in folder.enumerate_messages_entry_id():
            transport_message_headers = pst.extract_property(
                base64.b64decode(msg_id),
                KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.tag)
from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for msg_id in folder.enumerate_messages_entry_id():
            attachments = pst.extract_attachments(msg_id)
from aspose.email.mapi import MapiMessageFlags
from aspose.email.storage.pst import PersonalStorage, PersonalStorageQueryBuilder

with PersonalStorage.from_file("storage.pst") as pst:
    builder = PersonalStorageQueryBuilder()

    # Unread messages
    builder.has_no_flags(MapiMessageFlags.READ)

    for folder in pst.root_folder.enumerate_folders():
        unread = folder.get_contents(builder.get_query())

Instead of using:

from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for entry_id in folder.enumerate_messages_entry_id():
            msg = pst.extract_message(entry_id)
            msg.save("message.msg")

use:

from aspose.email.storage.pst import PersonalStorage

with PersonalStorage.from_file("storage.pst") as pst:
    for folder in pst.root_folder.enumerate_folders():
        for entry_id in folder.enumerate_messages_entry_id():
            with open("message.msg", "wb") as stream:
                pst.save_message_to_stream(entry_id, stream)