Crear y organizar archivos PST en Python
Crear nuevo archivo PST y agregar subcarpetas
Aspose.Email proporciona la funcionalidad para crear archivos Personal Storage Table (PST) desde cero y agregar subcarpetas a ellos. Con el PersonalStorage clase, puedes gestionar operaciones relacionadas con archivos PST, que almacenan mensajes de correo, eventos del calendario, contactos y otros datos.
El siguiente ejemplo de código muestra cómo crear un nuevo archivo de almacenamiento y agregarle una carpeta "Inbox":
- Utilice el PersonalStorage.create método para generar un nuevo archivo PST con el directorio especificado. El archivo se crea usando el
UNICODEformato para compatibilidad con aplicaciones modernas. - Accede a la carpeta raíz del archivo PST y agrega una nueva subcarpeta llamada "Inbox" para organizar los mensajes de correo electrónico.
Comprobación de coincidencia de clase de contenedor
Aspose.Email para Python ofrece una solución que mejora el proceso de validación durante la creación de carpetas en archivos PST. Con la propiedad enforce_container_class_matching del FolderCreationOptions clase, puedes asegurar una coincidencia estricta de clases de contenedor al agregar una nueva carpeta al almacenamiento PST. Esta característica ayuda a mantener la jerarquía organizativa dentro del archivo PST al prevenir discrepancias en las clases de contenedor. Al establecer ‘EnforceContainerClassMatching’ en ’true’, se lanzará una excepción si las clases de contenedor de las carpetas padre e hija no coinciden, proporcionando una salvaguarda contra estructuras de carpetas incorrectas. El comportamiento predeterminado de esta propiedad es ‘false’, lo que permite flexibilidad en la creación de carpetas mientras te permite imponer una coincidencia estricta de clases de contenedor cuando sea necesario.
El siguiente ejemplo de código muestra el uso de la propiedad enforce_container_class_matching para controlar si se debe lanzar una excepción al agregar carpetas con clases de contenedor que no coinciden:
with PersonalStorage.create("storage.pst", FileFormatVersion.Unicode) as pst:
contacts = pst.createpredefinedfolder("Contacts", StandardIpmFolder.Contacts)
# An exception will not arise. EnforceContainerClassMatching is False by default.
contacts.addsubfolder("Subfolder1", "IPF.Note")
# An exception will occur as the container class of the subfolder being added (IPF.Note)
# does not match the container class of the parent folder (IPF.Contact).
contacts.addsubfolder("Subfolder3", FolderCreationOptions(enforcecontainerclassmatching=True, containerclass="IPF.Note"))
Cambiar la clase de contenedor de la carpeta
A veces es necesario cambiar la clase de una carpeta. Un ejemplo común es cuando mensajes de diferentes tipos (citas, mensajes, etc.) se agregan a la misma carpeta. En tales casos, la clase de la carpeta debe cambiarse para que todos los elementos se muestren correctamente. El siguiente fragmento de código muestra cómo cambiar la clase de contenedor de una carpeta en PST para este propósito:
Añadir mensajes en bloque con rendimiento mejorado
Agregar mensajes en bloque a un archivo PST en lugar de agregarlos individualmente puede ofrecer varias ventajas, particularmente en términos de eficiencia y rendimiento: menos operaciones de E/S, tiempo reducido para completar la tarea, los recursos del sistema se utilizan de manera más eficiente, etc. El método add_messages del FolderInfo clase se utiliza para transferir la colección de mensajes MAPI obtenidos de la carpeta origen a la carpeta destino.
Añadir mensajes desde otro PST
Para enumerar y recuperar todos los mensajes MAPI de la carpeta origen de un archivo PST, usa el método enumerate_mapi_messages() del FolderInfo clase. Luego, agrega estos mensajes a la carpeta de destino de otro archivo PST.
import aspose.email as ae
src_pst = ae.storage.pst.PersonalStorage.from_file("source.pst", False)
dest_pst = ae.storage.pst.PersonalStorage.from_file("destination.pst")
# Get the folder by name
src_folder = src_pst.root_folder.get_sub_folder("SomeFolder")
dest_folder = dest_pst.root_folder.get_sub_folder("SomeFolder")
dest_folder.add_messages(src_folder.enumerate_mapi_messages())
Añadir mensajes desde directorio
Para agregar mensajes desde un directorio, después de abrir el archivo y obtener la referencia a una carpeta específica dentro del archivo PST, recupera una lista de nombres de archivo de un directorio especificado por la variable "path" y crea una lista MSG vacía para cargar cada archivo como un MapiMessage. Añade cada mensaje cargado a msg_list. El siguiente ejemplo de código muestra el proceso de agregar mensajes desde el directorio:
import aspose.email as ae
import os
pst = ae.storage.pst.PersonalStorage.from_file("my.pst", False)
# Get the folder by name
folder = pst.root_folder.get_sub_folder("SomeFolder")
dirs = os.listdir("path")
msg_list = []
for file in dirs:
msg = ae.mapi.MapiMessage.load(file)
msg_list.append(msg)
folder.add_messages(iter(msg_list))