Lea el archivo PST de Outlook y obtenga información sobre carpetas y subcarpetas

Cargar un archivo PST

Se puede cargar un archivo PST de Outlook en una instancia de PersonalStorage clase. A continuación se muestra un fragmento de código para cargar el archivo PST:

Visualización de la información de carpetas

Tras cargar el archivo PST en PersonalStorage clase, puede obtener la información sobre el nombre para mostrar del archivo, la carpeta raíz, las subcarpetas y el recuento de mensajes. El siguiente fragmento de código muestra el nombre de un archivo PST, las carpetas y el número de mensajes de las carpetas:

Obtenga solo carpetas definidas por el usuario

Los archivos PST/OST pueden contener carpetas creadas por el usuario. Aspose.Email ofrece la posibilidad de acceder únicamente a las carpetas definidas por el usuario mediante el PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser propiedad. Puede configurar el PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser propiedad a true para obtener solo las carpetas definidas por el usuario. El siguiente fragmento de código demuestra el uso de PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser para obtener carpetas definidas por el usuario.

Comprobar si la carpeta está en una carpeta predefinida

Al abrir e inspeccionar las carpetas de un archivo PST (tabla de almacenamiento personal), puede comprobar si cada carpeta es un tipo de carpeta predefinido o una subcarpeta de un tipo de carpeta predefinido y obtener la información sobre cada carpeta.

The FolderInfo.getPredefinedType (booleano getForTopLevelParent) el método se usa para comprobar si la carpeta es de StandardIpmFolder.

Si el parámetro ‘getForTopLevelParent’ es verdadero, el método devuelve un valor de enumeración StandardIPMFolder para la carpeta principal de nivel superior. Esto determina si la carpeta actual es una subcarpeta de una carpeta predefinida. Si el parámetro ‘getForTopLevelParent’ es falso, devuelve un valor de enumeración StandardIPMFolder para la carpeta actual.

String fileName = "my.pst";

try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
    checkFolders(pst.getRootFolder().getSubFolders());
}

private void checkFolders(FolderInfoCollection folders) {
    for (FolderInfo folder : folders) {
        System.out.println("Display Name: " + folder.getDisplayName());

        // Determines whether the current folder is a predefined folder
        int folderType = folder.getPredefinedType(false);
        String answer = folderType == StandardIpmFolder.Unspecified ? "No" : "Yes, " + folderType;
        System.out.println("Is StandardIpmFolder?: " + answer);

        // Determines whether the current folder is a subfolder of a predefined folder
        if (folderType == StandardIpmFolder.Unspecified) {
            folderType = folder.getPredefinedType(true);
            answer = folderType == StandardIpmFolder.Unspecified ? "No" : "Yes, " + folderType;
            System.out.println("Is subfolder from StandardIpmFolder parent?: " + answer);
        }

        System.out.println();

        checkFolders(folder.getSubFolders());
    }
}

Obtenga o agregue una carpeta de fuentes RSS estándar en un archivo PST

Aspose.Email permite recuperar una referencia a la carpeta predefinida que contiene las fuentes RSS. Esto puede resultar útil si desea acceder mediante programación a las fuentes RSS almacenadas en un archivo PST de Outlook y manipularlas. Asigne el valor de las fuentes RSS a StandardIpmFolder enum.

El siguiente ejemplo de código muestra cómo obtener una carpeta de fuentes RSS:

try (PersonalStorage pst = PersonalStorage.fromFile("my.pst", false)) {
    FolderInfo rssFolder = pst.getPredefinedFolder(StandardIpmFolder.RssFeeds);
}

Y el ejemplo de código que aparece a continuación muestra cómo añadir una carpeta de fuentes RSS:

try (PersonalStorage pst = PersonalStorage.create("my.pst", FileFormatVersion.Unicode)) {
    FolderInfo rssFolder = pst.createPredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}

Analizar carpetas en las que se pueden buscar

Un PST/OST puede contener carpetas con capacidad de búsqueda además del tipo normal de carpetas. Aspose.Email proporciona FolderKind enumerador para especificar los mensajes de dichas carpetas de búsqueda con EnumerateFolders and GetSubFolders methods.

Recuperar la información de la carpeta principal de MessageInfo

El siguiente fragmento de código muestra cómo recuperar la información de la carpeta principal de MessageInfo.

API de recorrido de archivos PST

La API transversal permite extraer todos los elementos de PST en la medida de lo posible, sin descartar excepciones, incluso si algunos datos del archivo original están dañados. Los pasos siguientes muestran cómo usar esta API.

Use PersonalStorage constructor y load método en lugar del método fromFile.

El constructor permite definir un método de devolución de llamada.

try (PersonalStorage currentPst = new PersonalStorage(new TraversalExceptionsCallback() {
    public void invoke(TraversalAsposeException exception, String itemId) {
        // Exception handling code.
    }
})) {
    //
}

Las excepciones de carga y recorrido estarán disponibles mediante el método de devolución de llamada.

The load el método devuelve ‘true’ si el archivo se ha cargado correctamente y es posible recorrerlo más a fondo. Si un archivo está dañado y no es posible recorrerlo, se devuelve «falso».

if (currentPst.load(inputStream))

Esto permite abrir y recorrer incluso archivos PST corruptos sin descartar excepciones. Tanto las excepciones como los elementos corruptos se gestionarán mediante el método de devolución de llamada.

try (PersonalStorage pst = new PersonalStorage(new TraversalExceptionsCallback() {
    public void invoke(TraversalAsposeException exception, String itemId) {
        // Exception handling code.
    }
})) {
    if (pst.load("test.pst")) {
        getAllMessages(pst, pst.getRootFolder());
    }
}

private static void getAllMessages(PersonalStorage pst, FolderInfo folder) {
    for (String messageEntryId : folder.enumerateMessagesEntryId()) {
        MapiMessage message = pst.extractMessage(messageEntryId);
    }
    for (FolderInfo subFolder : folder.getSubFolders()) {
        getAllMessages(pst, subFolder);
    }
}