Java调用EWS在Exchange2016创建日程失败报存储中未找到指定对象错误
Exchange 2016 下EWS创建日程报错解决方案
错误说明
报错对应英文为The specified object was not found in the store,本质是EWS请求无法定位到目标用户的日历文件夹,由Exchange 2016和2010的配置规则差异导致,可按如下步骤逐一排查修复:
修复步骤
1. 配置EWS操作权限
Exchange 2016对跨用户邮箱操作的权限校验比2010严格,原2010可用的管理员完全访问权限默认不支持EWS跨用户写入,需单独配置权限:
- 若需要批量操作所有医生邮箱,给管理员账号配置EWS模拟权限,在Exchange 2016 PowerShell中执行:
New-ManagementRoleAssignment -Name:EWSImpersonationConfig -Role:ApplicationImpersonation -User:"你的管理员账号名称"
- 若仅需操作单个目标邮箱,给管理员账号单独授予目标日历的编辑权限,法语环境邮箱日历文件夹名为
Calendrier,中文环境为日历,对应调整命令中的文件夹名:
# 法语环境示例 Add-MailboxFolderPermission -Identity "XXX@XXX.fr:\Calendrier" -User "管理员账号名" -AccessRights Editor
2. 适配Exchange版本参数
你当前代码中指定的Exchange2010_SP2版本参数可能被Exchange2016的安全规则拦截,修改代码中的版本声明:
// 原代码 ExchangeVersion exver = ExchangeVersion.Exchange2010_SP2; // 替换为,若EWS库无该枚举,先升级ews-java-api到最新稳定版 ExchangeVersion exver = ExchangeVersion.Exchange2016;
3. 验证目标邮箱状态
如果管理员账号和目标医生邮箱分别在2010和2016两个环境,跨版本EWS访问会触发该错误,确认所有目标医生的邮箱已完整迁移到Exchange2016环境。可在代码中新增文件夹预校验逻辑,提前确认文件夹可访问:
// 在appointment.save之前添加如下代码 Folder calendarFolder = Folder.bind(service, new FolderId(WellKnownFolderName.Calendar, mb)); // 执行到此处无报错即说明文件夹可正常访问
4. 调整EWS节流策略
Exchange2016默认的EWS节流策略比2010严格,短时间高频请求会被拦截,可在PowerShell中修改管理员账号对应的节流策略,放宽EWS请求限制。
内容的提问来源于stack exchange,提问作者Pandalex
相关产品推荐
相关产品推荐

