Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在将.pst文件提取到msg,但未获取msg文件的确切数目_Java_Aspose - Fatal编程技术网

Java 正在将.pst文件提取到msg,但未获取msg文件的确切数目

Java 正在将.pst文件提取到msg,但未获取msg文件的确切数目,java,aspose,Java,Aspose,我正在尝试将pst文件解压缩到msg中。 我用的是一个瓶子。我分享我的代码,在那里我们可以得到每个子文件夹中文件的确切数量 public static void displayFolderAndMessageInformationForPSTFile(String dataDir) { // Load the Outlook PST file PersonalStorage pst = PersonalStorage.fromFile(dataDir + "allen.pst"

我正在尝试将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("-----------------------------------");
    }
}
publicstaticvoiddisplayfolderandmessageinformationforpstfile(stringdatadir){
//加载Outlook PST文件
PersonalStorage pst=PersonalStorage.fromFile(dataDir+“allen.pst”);
//获取文件夹信息
FolderInfoCollection FolderInfoCollection=pst.getRootFolder().getSubFolders();
//浏览每个文件夹以显示文件夹名称和邮件数
对于(int i=0;i
FolderId:AAAA JJU05VTXVRJLC5MJEFQVVECGAAA
文件夹:收件箱
项目总数: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);
        }
    }
}
publicstaticvoidmain(字符串[]args){
字符串pstFileName=dataDir+“allen.pst”;
//加载Outlook PST文件
PersonalStorage pst=PersonalStorage.fromFile(pstFileName);
//获取文件夹和消息信息
FolderInfo FolderInfo=pst.getRootFolder();
//为此PST创建一个文件夹
字符串strRootFolderName=“allen.pst”.replace(“.pst”,”)+“.Java”;
新文件(dataDir+strRootFolderName).mkdir();
//调用递归方法从每个文件夹提取msg文件
extractMsgFiles(folderInfo、pst、dataDir+strRootFolderName);
}
私有静态void extractMsgFiles(FolderInfo FolderInfo、PersonalStorage pst、String strPSTFile){
//显示文件夹名称
System.out.println(“文件夹:+folderInfo.getDisplayName());
//创建文件夹以存储邮件
字符串folderName=strPSTFile+“\\”+folderInfo.getDisplayName();
新文件(folderName).mkdir();
//循环浏览此文件夹中的所有邮件
MessageInfoCollection MessageInfoCollection=folderInfo.getContents();
对于(int i=0;i

帮帮我。。。我哪里出错了?我是Aspose新手。

请查看以下用于提取消息文件的代码片段。您可以使用此方法代替提取msgfiles方法

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);
        }
    }
}
如果您对更多细节感兴趣,可以访问该链接。
我与Aspose合作,担任开发人员福音传道者。

没有唯一主题名称的电子邮件可能会导致此问题?我在Powershell中执行类似操作时遇到了这个问题。在文件名中添加一个自动编号可以帮助解决这个问题。

我使用了这个ExtractMsgFiles方法,但仍然没有得到消息的extact编号。同样,它在收件箱文件夹中显示49 msg。@Ashish,您可以在上共享您的示例PST文件,以便进一步调查。