使用 EWS 托管 API 与 EWS 进行通信
查找有关如何使用 EWS 托管 API 与 Exchange 中的 EWS 通信的信息。
注意
从 2022 年 10 月开始,我们将删除在 Exchange Online 中对 EWS 使用基本身份验证的功能:弃用 Exchange Online 中的基本身份验证。 应改用 OAuth 身份验证。 使用 OAuth 对 EWS 应用程序进行身份验证
EWS 托管 API 中的 ExchangeService 类包含用于设置用户凭据、标识 EWS 终结点、发送和接收 SOAP 消息以及将绑定配置为与 EWS 通信的方法和属性。 在使用 EWS 托管 API 执行任何任务之前,必须创建ExchangeService 类的实例并将其绑定到 EWS。
使用用户凭据和 EWS 终结点设置 ExchangeService 对象后,引用 ExchangeService 对象的任何邮箱对象都可以使用以下方法类型与 EWS 通信:
- ExchangeService 对象方法–ExchangeService 对象上未继承自基本 Object 类型的所有方法都会调用 EWS。
- Exchange 邮箱项和文件夹类型方法。
表 1. 与 EWS 通信的邮箱项目和文件夹类型方法
方法 | 功能 | 它调用的操作 |
---|---|---|
Load |
获取项、附件或用户配置对象的属性。 |
GetItem 操作 GetAttachment 操作 GetUserConfiguration 操作 |
绑定 |
使用服务器上现有项中的信息填充客户端上的新项。 |
GetItem 操作 |
Save |
保存服务器上客户端项的副本。 |
UpdateItem 操作 UpdateFolder 操作 CreateItem 操作 CreateFolder 操作 |
更新 |
使用在客户端上所做的更改更新服务器。 对于项目和文件夹,Update 方法使用 UpdateItem 操作 和 UpdateFolder 操作。 |
UpdateItem 操作 UpdateFolder 操作 |
删除 |
删除服务器上的项。 对于项目和文件夹,Delete 方法使用 DeleteFolder 操作。 |
DeleteItem 操作 DeleteFolder 操作 |
Copy |
在服务器上创建项或文件夹的副本。 |
CopyItem 操作 CopyFolder 操作 |
移动 |
移动服务器上的项或文件夹。 |
MoveItem 操作 MoveFolder 操作 |
使用 EWS 托管 API 与 EWS 通信
实例化 ExchangeService 类。
ExchangeService service = new ExchangeService();
注意
使用空构造函数实例化 ExchangeService 将创建绑定到最新已知版本 Exchange 的实例。 或者,可以通过将版本指定为参数来面向特定版本的 Exchange。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
设置向 Exchange 服务器发送请求的用户的凭据。 如果要使用经过身份验证的用户的凭据从登录到域的计算机连接到 EWS, 设置 ExchangeService 对象上的 UseDefaultCredentials 属性为 true。
// Connect by using the default credentials of the authenticated user. service.UseDefaultCredentials = true;
如果不想使用默认用户凭据进行连接,请在 ExchangeService 对象上设置 Credentials 属性以显式指定其他用户的凭据。 如果将 Exchange Online 或 Exchange Online 用作 Office 365 的一部分,则只需使用用户名和密码即可使用基本身份验证。 NTLM 身份验证需要域名。
// Connect by using the credentials of user1 at contoso.com. service.Credentials = new WebCredentials("user1@contoso.com", "password");
还可以使用用户的域名和密码指定用户的凭据。
// Connect by using the credentials of contoso/user1. service.Credentials = new WebCredentials("user1", "password", "contoso");
注意
如果 UseDefaultCredentials 属性设置为true,则忽略 Credentials 属性的值。
设置 EWS 终结点的 URL。 此 URL 会在客户端访问服务器上找到 exchange.asmx 文件。
// Use Autodiscover to set the URL endpoint. service.AutodiscoverUrl("user1@contoso.com");
注意
尽管可以显式将 ExchangeService 的 Url 属性设置为硬编码值,但出于以下原因,建议改用自动发现服务,原因如下:
- 自动发现可以确定给定用户的最佳终结点(最靠近用户邮箱服务器的终结点)。
- 如果部署了新的客户端访问服务器,则 EWS URL 可能会更改。 在此方案中,使用自动发现表示无需更改代码。
- 应显式设置 URL 或调用 AutodiscoverUrl,但不应同时执行这两种操作。