Извлечение файла PST в MSG, но не точное количество файла MSG - PullRequest
0 голосов
/ 31 мая 2018

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

public static void displayFolderAndMessageInformationForPSTFile(String dataDir) {

    // Load the Outlook PST file
    PersonalStorage pst = PersonalStorage.fromFile(dataDir + "allen.pst");

    // Get the folders information
    FolderInfoCollection folderInfoCollection = pst.getRootFolder().getSubFolders();

    // Browse through each folder to display folder name and number of messages
    for (int i = 0; i < folderInfoCollection.size(); i++) {
        FolderInfo folderInfo = (FolderInfo) folderInfoCollection.get_Item(i);
        System.out.println("FolderId: " + folderInfo.getEntryIdString());
        System.out.println("Folder: " + folderInfo.getDisplayName());
        System.out.println("Total items: " + folderInfo.getContentCount());
        System.out.println("Total unread items: " + folderInfo.getContentUnreadCount());
        System.out.println("-----------------------------------");
    }
}

FolderId: AAAAAJJu05VTxVRJlC5mJefQvVeCgAAA
Папка: Входящие
Всего элементов: 66
Всего непрочитанных элементов: 0

Но при извлечении содержимого сообщения я получаю другое количество сообщений.В папке «Входящие» он дает только 49 сообщений.
Следующий код:

public static void main(String[] args) {

    String pstFileName = dataDir + "allen.pst";
    // Load the Outlook PST file
    PersonalStorage pst = PersonalStorage.fromFile(pstFileName);

    // Get the folders and messages information
    FolderInfo folderInfo = pst.getRootFolder();

    // Create a folder for this PST
    String strRootFolderName = "allen.pst".replace(".pst", "") + ".Java";
    new File(dataDir + strRootFolderName).mkdir();

    // Call the recursive method to extract msg files from each folder
    extractMsgFiles(folderInfo, pst, dataDir + strRootFolderName);

}

private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst, String strPSTFile) {

    // Display the folder name
    System.out.println("Folder: " + folderInfo.getDisplayName());

    // Create folder to store the messages
    String folderName = strPSTFile + "\\" + folderInfo.getDisplayName();
    new File(folderName).mkdir();

    // Loop through all the messages in this folder
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();

    for (int i = 0; i < messageInfoCollection.size(); i++) {
        MessageInfo messageInfo = (MessageInfo) messageInfoCollection.get_Item(i);
        System.out.println("Saving message " + messageInfo.getSubject() + "....");
        // Get the message in MapiMessage instance
        MapiMessage message = pst.extractMessage(messageInfo);

        // Delete special characters which are invalid to use as windows file name
        String messageName = null;
        if (message.getSubject() == null || message.getSubject().isEmpty() == true) {
            messageName = getRidOfIllegalFileNameCharacters(messageInfo.getEntryIdString());
        } else {
            messageName = getRidOfIllegalFileNameCharacters(message.getSubject());
        }

        // Save this message to disk in MSG format
        message.save(folderName + "\\" + messageName + ".msg");
    }

    // Call this method recursively for each subfolder
    if (folderInfo.hasSubFolders() == true) {
        for (int i = 0; i < folderInfo.getSubFolders().size(); i++) {
            FolderInfo subfolderInfo = (FolderInfo) folderInfo.getSubFolders().get_Item(i);
            extractMsgFiles(subfolderInfo, pst, strPSTFile);
        }
    }
}

Помогите мне ... Где я допустил ошибку?Я новичок в Aspose.

Ответы [ 2 ]

0 голосов
/ 29 июля 2019

Эту проблему могут вызывать электронные письма, не имеющие уникальных названий тем?У меня была именно эта проблема, когда я делал что-то похожее в Powershell.Помещение автономного номера в имя файла может помочь обойти это.

0 голосов
/ 31 мая 2018

Пожалуйста, посмотрите следующий фрагмент кода для извлечения файлов сообщений.Вы можете использовать этот метод вместо вашего extractMsgFiles метода.

private static void ExtractMsgFiles(FolderInfo folderInfo, PersonalStorage pst)
{

    // display the folder name
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");

    // loop through all the messages in this folder
    MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

    foreach (MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);

        // get the message in MapiMessage instance
        MapiMessage message = pst.ExtractMessage(messageInfo);

        // save this message to disk in msg format
        message.Save(message.Subject.Replace(":", " ") + ".msg");

        // save this message to stream in msg format
        MemoryStream messageStream = new MemoryStream();

        message.Save(messageStream);
    }

    // Call this method recursively for each subfolder
    if (folderInfo.HasSubFolders == true)
    {
        foreach (FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Вы можете посетить ссылку Работа с сообщениями в PST-файле , если вы заинтересованыболее подробно.Я работаю с Aspose в качестве разработчика евангелиста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...