Pstcreation在安装outlook时正常工作。
现在,我正在尝试使用独立版本的MAPI创建一个pst文件。但是我的进程停留在pstStore.Remove()中。 。此外,当它停留在pstStore.Remove()时,我关闭了pst创建过程。 pst在路径中。 但是当我将pst移动到另一个安装了outlook的系统之后打开它时,pst中没有邮件,尽管pst的大小很重要。
第二次: 我运行了pst过程并重复了上述步骤。这次pst文件中有邮件。
第3次: 我运行了pst过程并重复了上述步骤。这次pst文件中没有邮件。
兑换是否需要特殊处理才能使用独立版本的MAPI创建pst,或者安装Outlook的相同代码应该不做任何修改?
@Dimitry:我无法访问我的雅虎帐户。
代码:
private bool CreatePstWithRedemption(EmailJTableArgs objJTablArgs, EmailFilterArgs objFilterArgs,
EmailExportRequestParams emailExportRequestParams)
{
RDOSession oSession = null;
IRDOStore store = null;
RDOFolder fFOlder = null;
RDOFolder childFolder = null;
IRDOItems folderItems = null;
var pstCreationStatus = false;
try
{
oSession = new RDOSession();
store = oSession.LogonPstStore(_fileName, 1, "PST");
var folderName = Path.GetFileNameWithoutExtension(_fileName);
if (store != null)
{
fFOlder = store.IPMRootFolder;
foreach (RDOFolder folder in fFOlder.Folders)
{
folder.Delete();
}
childFolder = fFOlder.Folders.Add(folderName, Type.Missing);
folderItems = childFolder.Items;
var resultOfGetEmails = new ResultGetEmails();
resultOfGetEmails.TotalCount = -1;
do
{
var journalEmails = GetEmailList(objFilterArgs, objJTablArgs, emailExportRequestParams,
resultOfGetEmails);
for (var i = 0; i < journalEmails.Count; i++)
{
IRDOMail mail = null;
try
{
mail = folderItems.Add(rdoItemType.olMailItem);
// populate mail fields
mail.Sent = true;
mail.Save();
}
finally
{
if (mail != null)
Marshal.ReleaseComObject(mail);
}
}
resultOfGetEmails.TotalCount -= BatchSize;
objJTablArgs.PageStartIndex += BatchSize;
} while (resultOfGetEmails.TotalCount > 0);
pstCreationStatus = true;
store.Remove();
}
}
finally
{
// Do cleanup
if (oSession != null && oSession.LoggedOn)
{
try
{
oSession.Logoff();
Marshal.ReleaseComObject(oSession);
}
catch
{
}
}
}
return pstCreationStatus;
}
答案 0 :(得分:0)
为什么要从(临时)配置文件中删除(唯一的)商店? LogonPstStore将创建(并立即删除)临时配置文件,因此没有理由在将要删除的配置文件中管理存储。