Java 正在将.pst文件提取到msg,但未获取msg文件的确切数目
我正在尝试将pst文件解压缩到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"
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文件,以便进一步调查。