2014-12-03 34 views
1

我试图用救赎正是如此设置(实际上明确)在PST文件PR_PST_PASSWORD属性:MAPI_E_NO_ACCESS错误设置RDOPstStore财产

RDOSession session = new RDOSession(); 
RDOPstStore store = session.LogonPstStore(sourcePstPath,Type.Missing,Type.Missing,password); 
Int32 PR_PST_PASSWORD = 0x67ff0003; 
store.Fields[PR_PST_PASSWORD] = 0x00000000; 

最后一行抛出此异常:

System.UnauthorizedAccessException was unhandled 
HResult=-2147024891 
Message=Error in HrSetOneProp: MAPI_E_NO_ACCESS 

有没有办法可以设置这个属性?

+0

'你在使用'多线程'运行这个... ...吗?如果是这样,那么这听起来像问题和或问题。 – MethodMan 2014-12-03 20:46:19

+0

不,单线程。 – 2014-12-04 15:09:59

回答

1

首先,在添加PST存储时配置PST服务时,需要提供PST密码。它绝对不会作为商店本身的属性存储。你是否在OutlookSpy中拥有该财产?

其次,我从来没有见过0x67ff0003属性。我知道PR_FAIMsgFolderPropTagArray和PR_ServerName属性,但它们的类型是PT_BINARY(0x67FF0102),而不是PT_LONG。

+0

根据MSDN,PidTagPstPassword属性存储密码文本的散列(请参阅http://msdn.microsoft.com/zh-cn/library/ff385916(v=office.12).aspx)。根据ASPOSE.Email文档(http://www.aspose.com/docs/display/emailnet/Check+if+a+PST+is+password+protected)我可以查询此属性以确定它是否受密码保护或不。我需要清除此属性,以便进程可以在pst文件上向下游运行。有没有办法用赎回来清除这个问题?谢谢德米特里。 – 2014-12-03 21:06:33

+0

该属性未公开在IMsgStore MAPI对象上。它只存储在PST文件本身。由于Aspose不使用MAPI访问PST文件,因此可以将其作为单独的属性公开。 MSPST提供商不这么做 - 您只能在将PST添加到配置文件时更改密码 - MSPST提供商允许您指定旧密码和新密码。 – 2014-12-03 22:06:58

+0

谢谢德米特里。你说“你只能在PST被添加到配置文件时更改密码” - 有没有办法通过兑换来做到这一点? – 2014-12-03 22:37:58