使用Redemption+Outlook2016调用GetSharedMailbox报错‘Could not find the store DN’
解决方案建议
这种情况我之前碰到过类似的,结合你的场景,给你几个排查和解决的方向:
1. 同步Redemption版本并确认运行上下文
- 先检查问题机和开发笔记本上的Redemption版本是否一致,版本差异经常会导致AD/Exchange对象解析的兼容性问题。建议把开发本上验证可用的Redemption安装包/DLL同步到问题机,重新注册组件(比如执行命令:
regsvr32.exe Redemption.dll)。 - 确认程序的运行身份:是不是和Outlook登录的域账户完全一致?有时候问题机可能用了服务账户、管理员身份启动程序,哪怕Outlook能正常访问,程序的权限上下文也可能出现差异,导致共享邮箱DN解析失败。
2. 绕开DN解析,直接用StoreID打开共享邮箱
自动解析共享邮箱的DN可能受限于本地AD缓存或Exchange配置,你可以换一种方式打开:
- 在问题机的Outlook中,先找到目标共享邮箱,通过Outlook VBA或第三方工具获取它的
StoreID; - 用Redemption的
GetSharedMailboxFromStoreID方法替代GetSharedMailbox,绕开DN解析步骤。
调整后的代码示例:
Try Dim rdo as RDOSession = New RDOSession rdo.Logon() ' 替换为从Outlook获取的共享邮箱StoreID Dim sharedBoxStoreID As String = "your-shared-mailbox-store-id-value" Dim sharedBox As RDOStore = rdo.GetSharedMailboxFromStoreID(sharedBoxStoreID) inbox = sharedBox.GetDefaultFolder(rdoDefaultFolders.olFolderInbox) Console.WriteLine(String.Format("Mailbox: {0} ({1})", sharedBox.Name, sharedBox.EntryID)) ' Do a bunch of stuff with inbox.Items Catch err As Exception My.Application.Log.WriteException(err, TraceEventType.Error, "Error connecting to mail server") End Try
3. 清除缓存并重置Kerberos票据
- 问题机上Outlook虽然能正常访问,但可能残留了旧的缓存数据。可以尝试:删除并重新配置Outlook配置文件(注意提前备份邮件),或者清除Outlook的自动完成缓存。
- 改域密码后,Kerberos票据可能存在残留冲突,在问题机的命令提示符中执行
klist purge清除所有Kerberos票据,然后重新登录域再运行程序。
4. 验证AD的LDAP/DNS解析能力
虽然其他域资源正常,但共享邮箱的DN解析依赖LDAP查询:
- 用
nslookup命令测试问题机到域控制器的DNS解析是否正常; - 用
ldp.exe工具连接域控制器,尝试查询目标共享邮箱的AD对象信息,确认LDAP连接和查询无异常。
内容的提问来源于stack exchange,提问作者Hobbes
相关产品推荐
相关产品推荐

