如何解决数据丢失防护策略使 OpenMsgStore 失败 (0x80040312)
启用 DLP 策略后,兑换失败并显示以下错误: “所有企业电子邮件都根据您组织中设置的策略受到保护。打开受保护的电子邮件时出错。”
ulLowLevelError: 2147746578 (即 0x80040312)
ulContext: 805701633 (0x30060801)
有什么办法可以解决这个问题吗?
尝试访问 IPMRootFolder
对象的 Store
属性时发生错误:
// A prevIoUs version of the code was multi-threaded,it is no longer.
Session = OutlookRpcLoader.new_RDOSession();
Session.logon(ProfileName: profile,ShowDialog: false,NewSession: true);
var stores = Session.Stores;
var store = stores["{STORE-NAME}"];
var root = store.IPMRootFolder;
调用堆栈显示 Redemption.IRDOStore.get_IPMRootFolder()
抛出了异常。
编辑
使用通过 .NET(免注册 COM)中的 RedemptionLoader
类加载的 Redemption 版本 5.22.0.5498 时会出现这种情况。
使用 CreateObject()
从 VBScript 使用 Redemption 版本 5.19.0.5238 进行测试时,不会发生错误。
v5.19 和 v5.22 之间有什么变化吗?
解决方法
首先,你需要检测你的代码在哪里运行——是前台线程还是后台线程。我建议检查进程的 ThreadID。前台线程的值设置为 1。所有后台线程的值都将大于 1。如果它是一个辅助线程,您需要在要使用的辅助线程上创建一个新的 Redemption 会话,并将 MAPIOBJECT
属性设置为从主线程检索的对象。例如,VB.NET 中的原始草图:
Dim PrimaryRDOSession As New Redemption.RDOSession()
PrimaryRDOSession.Login([...])
Dim WorkerThread as New System.Threading.Thread(AddressOf ThreadProc)
WorkerThread.Start(PrimaryRDOSession.MAPIOBJECT)
Sub ThreadProc(ByVal param as Object)
Dim ThdRDOSession As New Redemption.RDOSession()
ThdRDOSession.MAPIOBJECT = param
' do other stuff
End Sub
如果您在辅助线程上,请不要使用在主线程上创建的对象。确保在使用对象时保持一致。
,我相信这是由阻止未签名二进制文件的 AppLocker 规则引起的。解决方案是对文件进行代码签名或将程序添加到 AppLocker 允许列表中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。