EWS退役时间线与迁移指南:从Exchange Web Services到Microsoft Graph

摘要

Exchange Web Services(EWS)作为 Exchange Online 的核心 API 层已服役近二十年。Microsoft 已于 2025 年 9 月正式宣布 EWS 的分阶段退役计划[1]:2026年10月1日起,所有未经显式注册的 EWS 请求将被阻止;至 2027 年 4 月,EWS 将完全关闭,所有请求一律拒绝。本文基于 Microsoft 官方公告与迁移文档[1][2][4],系统阐述退役时间线与影响范围,并提供从 EWS 到 Microsoft Graph API 的完整迁移路线图,帮助依赖 EWS 的组织在截止日期前完成应用重构与过渡。

一、EWS 退役时间线与阶段划分

EWS 的退役并非突然关闭,而是分三个阶段逐步实施[1]。理解每个阶段的时间节点和影响范围,是制定迁移计划的起点。

1.1 阶段一:新租户默认阻止(已实施)

自 2025 年起,新创建的 Exchange Online 租户默认禁用 EWS 访问[1]。如果新租户需要启用 EWS,管理员必须通过 Exchange Online PowerShell 显式申请允许。这一阶段的目的是防止新部署的应用继续依赖即将淘汰的协议栈。

1.2 阶段二:仅允许白名单应用(2026年10月1日)

从 2026 年 10 月 1 日起,所有 Exchange Online 租户的 EWS 请求将被默认禁用[1]。唯一的例外是已在 EWSAllowedAppIDs 白名单中注册的应用程序。未注册的任何应用——包括第三方邮件客户端、归档工具、CRM/ERP 集成组件——将无法通过 EWS 访问 Exchange Online 数据。

此阶段可被视为"缓冲期":允许组织在继续使用关键 EWS 依赖应用的同时,完成向 Microsoft Graph API 的代码迁移。但必须注意,EWSAllowedAppIDs 仅是一个临时过渡机制,而非永久解决方案[1]。

1.3 阶段三:EWS 完全关闭(2027年4月)

2027 年 4 月,EWS 服务将完全关闭[1]。届时,无论是否在 EWSAllowedAppIDs 中注册,所有 EWS 请求均将被 Exchange Online 拒绝。这意味着:

退役阶段汇总表

阶段时间节点EWS 状态关键操作
阶段一已实施新租户默认禁用,可申请启用新部署应直接使用 Graph API
阶段二2026年10月1日仅白名单应用可访问 EWS注册 EWSAllowedAppIDs;启动代码迁移
阶段三2027年4月EWS 完全关闭所有应用必须完成 Graph API 迁移

二、受影响的应用与场景

EWS 退役的影响面远超许多 IT 管理者的预期。以下列出所有通过 EWS 访问 Exchange Online 的应用类型与集成场景[1][2]:

2.1 直接受影响的组件

2.2 不受影响的协议(重要区分)

以下协议和客户端 受 EWS 退役影响[1]:

三、替代方案:Microsoft Graph API

Microsoft Graph API 是 Microsoft 官方推荐、也是事实上唯一的 EWS 替代方案[2][3]。Graph API 是一套统一的 RESTful API,基于 OAuth 2.0 认证,提供对 Microsoft 365 全系数据(邮件、日历、联系人、任务、用户、组、文件等)的编程访问。

3.1 Graph API 核心优势

3.2 核心端点映射:EWS → Graph API

功能EWS 操作Graph API 端点
获取邮件列表FindItemGET /me/messages
读取单封邮件GetItemGET /me/messages/{id}
发送邮件CreateItem + SendItemPOST /me/sendMail
获取日历事件FindItem (CalendarView)GET /me/events
创建日历事件CreateItem (Calendar)POST /me/events
获取联系人FindItem (Contacts)GET /me/contacts
获取文件夹列表FindFolderGET /me/mailFolders
获取邮箱设置GetUserConfigurationGET /me/mailboxSettings
获取可用时间GetUserAvailabilityPOST /me/findMeetingTimes
搜索邮件FindItem (QueryString)GET /me/messages?$search="keyword"
订阅通知Subscribe (Streaming/Pull/Push)POST /subscriptions(Webhook)

3.3 代码迁移示例:EWS 到 Graph API

以下对比展示了从 EWS Managed API 迁移到 Microsoft Graph .NET SDK 的典型模式变化:

// === EWS Managed API (即将退役) ===
var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("user@contoso.com", "password");
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

var view = new ItemView(10);
var results = service.FindItems(WellKnownFolderName.Inbox, view);
foreach (var item in results) {
    Console.WriteLine(item.Subject);
}

// === Microsoft Graph API (.NET SDK) ===
var client = new GraphServiceClient(credential);
var messages = await client.Me.Messages
    .Request()
    .Top(10)
    .GetAsync();
foreach (var message in messages) {
    Console.WriteLine(message.Subject);
}

四、迁移实施五步法

从 EWS 迁移到 Microsoft Graph API 是一项系统工程,需要从审计、评估到验证的完整闭环。以下是经过验证的五步迁移方法论[1][4]:

步骤一:审计当前 EWS 使用情况

在迁移开始前,必须全面了解组织中哪些应用和用户在调用 EWS。推荐通过以下渠道收集信息:

步骤二:识别与分类 EWS 依赖

将审计发现的所有 EWS 依赖按以下维度分类:

分类维度示例迁移优先级
商业第三方产品邮件归档工具、CRM 插件、签名服务器联系供应商获取 Graph API 版本或确认替代方案
自研企业应用内部邮件报表系统、自动化审批邮件网关启动内部 Graph API 重构项目
运维脚本与自动化批量邮箱管理 PowerShell 脚本逐脚本重写,使用 Graph PowerShell SDK
遗留客户端Outlook Mac 2011、自定义 IMAP/EWS 混合客户端升级客户端或替换为标准 IMAP/SMTP 方案

步骤三:注册 EWSAllowedAppIDs(临时过渡)

对于无法在 2026 年 10 月 1 日前完成迁移的关键应用,可通过 Exchange Online PowerShell 将其注册到白名单中,确保业务连续性[1]:

# 设置 EWS 访问策略为强制白名单
Set-OrganizationConfig -EwsApplicationAccessPolicy EnforceAllowList

# 将应用 ID 添加到允许列表
Set-OrganizationConfig -EwsAllowList @{Add="AppID1","AppID2"}

# 验证当前配置
Get-OrganizationConfig | Format-List EwsApplicationAccessPolicy,EwsAllowList

需要向应用供应商或自研团队索取 Azure AD 中注册的应用程序 ID(Application ID / Client ID)。注意:此措施仅为过渡方案,2027 年 4 月全部失效[1]。

步骤四:将 EWS 代码迁移到 Microsoft Graph API

代码迁移是工作量最大的环节。以下为关键注意事项:

步骤五:验证与停用 EWS 依赖

迁移完成后,必须在生产环境中进行全面验证:

  1. 功能验证:对照 EWS 版本,逐项验证 Graph API 版本的功能完整性(邮件收发、日历操作、联系人管理、文件夹同步)
  2. 性能基准测试:在典型负载下比较 Graph API 版本的响应时间和吞吐量,确认无性能回退
  3. 并行运行期:在阶段二期间(2026.10.1 - 2027.4),保持 Graph API 版本与 EWS 版本并行运行,通过日志比对确保数据一致性
  4. 停用 EWS 配置:确认所有应用稳定运行后,从 EWSAllowList 中移除对应应用 ID,并监控是否有异常
  5. 最终验证:在阶段三(2027年4月)到来前,确认所有应用的 EWS 依赖已完全移除,仅通过 Graph API 运行

五、风险评估与缓解策略

5.1 核心风险矩阵

风险可能性影响缓解措施
未识别隐藏的 EWS 依赖导致应用在阶段二断连全量审计 Azure AD 登录日志;与所有业务部门逐一确认集成交互;阶段二前注册 EWSAllowedAppIDs 兜底
第三方应用供应商未及时提供 Graph API 版本立即联系所有 EWS 依赖的供应商,获取迁移时间表或替代方案;对于无迁移计划的应用,寻找替代产品
自研应用迁移工作量低估导致错过截止日期尽早启动代码审计与工作量评估;使用 EWSAllowedAppIDs 争取缓冲时间;分批迁移,先迁移关键路径
Graph API 不支持特定 EWS 高级操作查阅 Microsoft Graph 功能覆盖文档[4];对于 Graph API 未覆盖的边缘操作,评估改用 Exchange Online PowerShell 或评估功能替代方案
OAuth 2.0 认证配置错误导致应用无法连接在测试租户中先行配置和验证 OAuth 流程;准备详细的 Entra ID 应用注册与权限配置文档
IMAP/POP3/SMTP Auth 被误认为受 EWS 退役影响而恐慌迁移明确沟通:标准邮件协议(IMAP/POP3/SMTP Auth)不受 EWS 退役影响[1]

5.2 EWSAllowedAppIDs 的局限性

EWSAllowedAppIDs 是一个有明确生命周期的过渡机制,使用时需注意以下限制[1]:

六、对国产邮件系统生态的启示

EWS 的退役不仅是 Microsoft 365/Exchange Online 用户面临的问题,对于整个邮件行业也具有深远的信号意义。EWS 作为基于 SOAP 的私有协议 API,其退役标志着邮件行业从私有协议 API 向标准化 RESTful API 的范式转变。

对于计划从 Exchange 迁移至国产邮件系统的组织而言,当前是审视应用架构的良机:将邮件集成层从 EWS 私有协议解耦,转而使用跨平台标准协议(IMAP/SMTP)或目标邮件系统提供的标准化 REST API,可以从根本上消除单一厂商的 API 锁定风险。在国产邮件系统的选型中,是否提供完善的 RESTful API 以及是否基于标准协议(而非私有封装)进行集成,应作为重要的评估维度。

参考文献

  1. Microsoft Exchange Team Blog. Introducing EWSAllowedAppIDs: Preparing for the Final Phase of EWS Retirement. September 2025. techcommunity.microsoft.com/blog/exchange
  2. Microsoft Learn. Deprecation of Exchange Web Services (EWS) in Exchange Online. learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/ews-applications-and-the-exchange-architecture
  3. Microsoft Learn. Microsoft Graph REST API Overview. learn.microsoft.com/en-us/graph/overview
  4. Microsoft Learn. Migrating from EWS to Microsoft Graph. learn.microsoft.com/en-us/graph/migrate-exchange-web-services
  5. Microsoft Learn. Authenticate with Microsoft Graph. learn.microsoft.com/en-us/graph/auth/auth-concepts