混合部署下本地EWS访问365邮箱遇ErrorNonExistentMailbox错误
Exchange混合部署EWS访问365邮箱触发ErrorNonExistentMailbox的排查与解决
问题概述
我们采用Exchange混合部署架构,包含本地邮箱及已迁移至Microsoft 365的邮箱。应用通过本地Exchange Web Services(EWS)访问用户日历:
- 本地用户可正常使用
- 访问365用户时触发ErrorNonExistentMailbox错误,且返回的
MailboxGuid为SID格式(而非标准GUID),错误详情如下:
<m:CreateItemResponseMessage ResponseClass="Error"> <m:MessageText>No mailbox with such guid.</m:MessageText> <m:ResponseCode>ErrorNonExistentMailbox</m:ResponseCode> <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey> <m:MessageXml> <t:Value Name="MailboxGuid">S-1-5-21-313343422-1840124433-.....</t:Value> </m:MessageXml> <m:Items/> </m:CreateItemResponseMessage>
已排除许可问题(用户均获授权),联系微软技术支持、使用远程连接分析器测试均未解决问题。
可能原因及排查解决步骤
1. 本地AD用户属性异常
已迁移至365的用户,本地AD对象属性未正确同步会导致EWS无法解析到365邮箱的GUID:
- 打开AD用户和计算机(高级模式),检查目标用户的属性:
- 确认
msExchRemoteRecipientType值为4(标识远程邮箱) - 确认
targetAddress为用户的365邮箱地址(格式:user@domain.onmicrosoft.com) - 确认
msExchMailboxGuid属性不为空,且与365邮箱的GUID一致(可通过Exchange Online PowerShell的Get-Mailbox <user> | Select-Object MailboxGuid获取)
- 确认
- 若属性异常,强制AD与Azure AD同步:
Start-ADSyncSyncCycle -PolicyType Delta
2. 混合部署远程域/组织关系配置错误
本地Exchange的远程域或组织关系配置不当,会导致EWS请求无法正确路由到365:
- 检查远程域配置:
确认存在针对365租户的远程域,且Get-RemoteDomain | Where-Object {$_.TargetDeliveryDomain -eq $true}TargetDeliveryDomain设为$true - 检查组织关系配置:
确认组织关系中正确配置了365的EWS端点,且Get-OrganizationRelationshipFreeBusyAccessEnabled、MailboxMoveEnabled等参数为$true
3. EWS请求寻址方式错误
应用若使用本地AD标识符(如SID、本地GUID)访问365邮箱,会导致EWS在本地查找邮箱失败:
- 修改应用的EWS请求逻辑,使用用户的主SMTP地址作为目标邮箱标识符
- 若使用EWS Managed API,示例代码如下:
var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); service.Credentials = new WebCredentials("local-service-account", "password"); service.AutodiscoverUrl("user@domain.com", RedirectionUrlValidationCallback); // 访问365用户日历,使用SMTP地址指定目标邮箱 var folderId = new FolderId(WellKnownFolderName.Calendar, "365-user@domain.com"); var items = service.FindItems(folderId, new ItemView(10));
4. Autodiscover配置未正确指向365
本地Autodiscover未返回365邮箱的EWS端点,会导致本地EWS尝试在本地查找邮箱:
- 测试目标用户的Autodiscover:
确认返回的EWS端点为Test-OutlookWebServices -Identity "365-user@domain.com" -ClientAccessServer "local-exchange-server"https://outlook.office365.com/EWS/Exchange.asmx
内容的提问来源于stack exchange,提问作者Don Ha
相关产品推荐
相关产品推荐

