兑换无法将项目添加到文件夹

时间:2015-05-22 23:53:31

标签: c# visual-studio-2012 outlook-redemption

我使用Redemption在C#中编写程序来遍历 RDOPstStore 中的 RDOMail 对象,并将标记为相关的对象复制到新的 RDOPstStore 。我可以修改 RDOPstStore.IPMRootFolder 中的文件夹,并且只保留一个文件夹(结果)。但是,当我将 RDOMail 项目添加到此文件夹(之前保存在列表中)时,这些项目不会出现在文件夹 Items 成员中。是否有一些我缺少的东西,以确保"添加" RDOMail对象是否保存在 RDOPstStore 对象中?这是代码

//create an output session 
RDOSession outputSession = new RDOSession(@"Redemption.RDOSession");

//logon/create output store
outputStore = outputSession.LogonPstStore(outputDir + '\\' + filename);

//clear the output store of any folders, we will leave only one: Results
foreach (RDOFolder folder in outputStore.IPMRootFolder.Folders)
{
       folder.Delete(); //successful
}
RDOFolder resultsFolder = outputStore.IPMRootFolder.Folders.Add("Results");

foreach(RDOMail mail in relevantItems) //relevantItems gathered previously
{
        resultsFolder.Items.Add(mail); //unsuccessful
        resultsFolder.Save();
}

/******************EDIT 5/26****************/
outputStore.Save();
outputSession.Logoff();
/******************END EDIT*****************/

所有人都非常感谢!

3 个答案:

答案 0 :(得分:1)

首先,LogonPstStore返回RDOPstStore对象的一个​​实例 - 没有理由从Stores集合中检索它或者第二次添加它。

outputStore  = outputSession.LogonPstStore(outputDir + '\\' + filename);

其次,PST提供程序会在稍后或会话关闭时将更改提交到PST文件。您的应用是否正常终止?你打电话给RDOSession.Logoff吗?

答案 1 :(得分:1)

等一下,您没有保存您添加的消息 - 您在文件夹上调用了save而不是Items.Add返回的

RDOMail item = resultsFolder.Items.Add(mail);
item.Save();

答案 2 :(得分:0)

好的,所以我能够发现这个问题。 @Dmitry Streblechenko是正确的,我登录到Pst商店后不需要添加新的PST商店(如有必要,会创建一个新文件)。

但真正的问题是将文件复制到新创建的PST商店。问题是使用RDOFolder.Items.Add(RDOMail)函数。直观地说,这个Add()函数可能是正确的(或者至少是有效的)方法是使用RDOMail.CopyTo(RDOMail/RDOFolder)函数。就这样......

mail.CopyTo(resultsFolder);

这成功地将RDOMail对象放入RDOFolder对象,而Add()函数则没有。作为附注,我读了另一篇@Dmitry帮助的帖子,他提到Add()函数用于创建新项目,所以它可能不是完全无用的。虽然似乎可以创建一个新的RDOMail对象,修改它,然后使用它的CopyTo()函数......

经验教训。