相关链接


https://docs.microsoft.com/zh-cn/exchange/client-developer/exchange-web-services/explore-the-ews-managed-api-ews-and-web-services-in-exchange


概述


Exchange 提供 Exchange web 服务 (EWS) 和其他可用于实现访问和管理 Exchange 的客户端应用程序的 web 服务存储项目。Exchange Web Services (EWS) 是一个跨平台 API,使应用程序访问邮箱项目,如电子邮件、 会议和联系人。 EWS 应用程序可以在本地或远程通过 SOAP 基于 XML 邮件中发送的请求访问邮箱项目。这意味着,只要您的应用程序可以发布通过 HTTP 的 XML,它可以使用 EWS 访问 Exchange 之间发送的 HTTP 消息中。

EWS应用程序中的常见操作是获取有关电子邮件,约会,会议以及存储它们的文件夹的信息。此示例获取帐户收件箱中的邮件数,并显示邮件总数和未读邮件数。

EWS应用程序的另一个常见操作是发送电子邮件或会议请求。


EWS 应用程序和 Exchange 内部部署体系结构


学习笔记-Exchange Web Service API-概述_EWS API


EWS 应用程序和 Exchange Online 体系结构


学习笔记-Exchange Web Service API-概述_Exchange_02

当 EWS 应用程序请求从 Exchange 存储的信息时,符合标准的 SOAP XML 请求消息创建并发送到 Exchange 服务器中。 Exchange 服务器接收请求时,它验证客户端提供的凭据,并自动分析所请求的数据的 XML。 然后,服务器建立 SOAP 响应,其中包含代表请求的强类型的对象及其属性的 XML 数据。 XML 数据发送回 HTTP 响应中的应用程序。 应用程序然后 XML 反序列化和使用数据修订的强类型的对象。


EWS必须支持的协议和标准


学习笔记-Exchange Web Service API-概述_Exchange_03


EWS协议必须支持的认证标准


学习笔记-Exchange Web Service API-概述_服务器_04


EWS应用程序类型


  • 客户端应用程序 - 使用EWS访问Exchange数据的独立应用程序。Outlook和Outlook Web App是客户端应用程序的示例。

  • 门户网站应用程序 - 通过包含从Exchange检索的信息(如忙/闲或联系信息)扩展现有网页的应用程序。检索Exchange数据的SharePoint Web部件是门户网站应用程序的示例。

  • 服务应用程序 - 用于将数据从Exchange集成或同步到现有系统的后台作业。例如,将Exchange中的联系人信息同步到CRM应用程序的应用程序。服务应用程序通常是内置于现有应用程序中的后台作业,该应用程序扩展到Exchange以关联系统与Exchange存储之间的数据。服务应用程序通常没有用户界面,并使用模拟或OAuth进行身份验证和访问。创建服务帐户以模拟用户在EWS服务应用程序中很常见,因为您可以授予单个帐户权限来模拟一组用户并为这些帐户执行邮箱操作。例如,EWS服务应用程序可以使用服务帐户和模拟来同步CRM解决方案和Exchange通讯组中的市场营销列表之间的数据。


开始使用EWS托管API客户端应用程序


https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-managed-api-client-applications

EWS托管API提供了一个简单而功能齐全的界面,用于开发和扩展使用Exchange Web服务(EWS)的应用程序。无论您是使用Visual Studio还是其他代码编辑器来开发EWS托管API应用程序,都需要引用EWS托管API程序集。

EWS API文件下载地址:https://github.com/officedev/ews-managed-api


EWS服务URL调用


您可以通过多种方式在应用程序中设置EWS URL。我们建议您使用自动发现服务来获取URL,因为在大型服务器林中,如果将邮箱迁移到其他服务器,则URL可能会更改。但是,因为如果您需要在短时间内拨打多个电话,调用自动发现可能需要一些时间并且可能会降低您的应用程序速度,您可能希望缓存从自动发现获得的URL值并使用此方法手动设置EWS服务URL缓存的价值。这将改善您的应用程序的性能; 只需确保使用自动发现定期更新缓存值,以防服务器上的值发生更改。

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-set-the-ews-service-url-by-using-the-ews-managed-api


在VS中创建的第一个EWS调用API示例文件(达到调用EWS API发送邮件的效果)

using System;
using Microsoft.Exchange.WebServices.Data;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.Credentials = new WebCredentials("user1@contoso.com", "password");
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.AutodiscoverUrl("user1@contoso.com", RedirectionUrlValidationCallback);
EmailMessage email = new EmailMessage(service);
email.ToRecipients.Add("user1@contoso.com");
email.Subject = "HelloWorld";
email.Body = new MessageBody("This is the first email I've sent by using the EWS Managed API");
email.Send();
}
private static bool RedirectionUrlValidationCallback(string redirectionUrl)
{
// The default for the validation callback is to reject the URL.
bool result = false;
Uri redirectionUri = new Uri(redirectionUrl);
// Validate the contents of the redirection URL. In this simple validation
// callback, the redirection URL is considered valid if it is using HTTPS
// to encrypt the authentication credentials.
if (redirectionUri.Scheme == "https")
{
result = true;
}
return result;
}
}
}


用于委托和文件夹访问的EWS操作


Exchange Web服务(EWS)和EWS托管API提供有限数量的操作,您可以使用这些操作来管理Exchange Online上的帐户,作为Office 365的一部分的Exchange Online,或者从Exchange 2013开始的Exchange版本。您可以使用下图中显示的操作用于管理委托和设置其他帐户的文件夹访问权限。

学习笔记-Exchange Web Service API-概述_EWS API_05

如果您的应用程序需要对Exchange服务器上的帐户进行其他控制,则可以使用Exchange命令行管理程序cmdlet来管理帐户。您可以通过执行以下操作之一来调用Exchange命令行管理程序cmdlet:

  • 使用调用Exchange命令行管理程序cmdlet的C#或Visual Basic编写应用程序。您可以查看https://docs.microsoft.com/en-us/exchange/client-developer/management/exchange-management-shell

  • 使用Windows PowerShell和Windows PowerShell脚本调用Exchange命令行管理程序cmdlet。您可以查看https://docs.microsoft.com/en-us/powershell/exchange/exchange-server/exchange-management-shell?view=exchange-ps


EWS的认证方式


Exchange online推荐使用Oauth认证、如果是企业内网的话使用NTLM,如果Oauth和NTLM都不满足的话,还可以使用Basic。参考:https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/authentication-and-ews-in-exchange

Microsoft Graph Mail,Calendar和Contact REST API

混合部署中的Office 365,Exchange Online和Exchange Server提供了一种使用电子邮件,日历和联系人的新方法。Microsoft Graph Mail,Calendar和Contact REST API提供了一种功能强大,易于使用的方式来访问和操作Exchange数据。这些API基于开放标准:OAuth版本2.0用于身份验证,OData版本4.0和JSON用于数据抽象。这提供了以下优点:

由于这些API需要OAuth进行身份验证,因此您的应用程序不必处理或存储用户凭据。

OAuth可以为用户数据请求严格范围的权限。例如,您可以将应用程序设计为请求权限并只读取用户的日历。


DEMO文档


使用EWS托管API与EWS通信

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-communicate-with-ews-by-using-the-ews-managed-api

跟踪请求和响应以解决EWS托管API应用程序的故障

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-trace-requests-responses-to-troubleshoot-ews-managed-api-applications

开始使用EWS客户端应用程序

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-client-applications

控制对Exchange中EWS的访问

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-control-access-to-ews-in-exchange

验证EWS托管API的服务器证书

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-validate-a-server-certificate-for-the-ews-managed-api

使用OAuth验证EWS应用程序

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

EWS自动发现Exchange

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/autodiscover-for-exchange

Outlook中的Outlook加载项和EWS

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/mail-apps-for-outlook-and-ews-in-exchange


更多内容请关注下方微信公众号:

学习笔记-Exchange Web Service API-概述_Exchange_06