C# Exchange Web服务托管API:访问其他用户项

C# Exchange Web服务托管API:访问其他用户项,c#,web-services,exchange-server,exchangewebservices,ews-managed-api,C#,Web Services,Exchange Server,Exchangewebservices,Ews Managed Api,是否可能访问登录用户帐户以外的其他Exchange帐户的文件夹和项目 我可以通过Exchange Web Services托管API执行此操作吗?可以,但您应该知道其他用户的密码,或者以某种方式获取此凭据(NetworkCredential对象)。典型的第一行代码可能是 ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1); myService.Credentials = new Ne

是否可能访问登录用户帐户以外的其他Exchange帐户的文件夹和项目


我可以通过Exchange Web Services托管API执行此操作吗?

可以,但您应该知道其他用户的密码,或者以某种方式获取此凭据(
NetworkCredential
对象)。典型的第一行代码可能是

ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1);
myService.Credentials = new NetworkCredential ("user@mycorp.local", "P@ssword00");
因此,您可以使用与当前用户不同的帐户访问Exchange Server Web服务。有关更多信息,请参阅说明


如果你是管理员,你可以成为用户。

我建议对每个用户使用模拟而不是登录。 通过模拟,您可以模拟用户。这与完全访问不同。完全访问权限为,模拟为

模拟的前提是您只有一个用户名和密码,而不是x个用户名和密码

您可以这样使用模拟:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new NetworkCredential(appName, appPassword, emailDomain);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userToImpersonate);

当一个用户委托其他人访问时,您可以访问另一个用户的文件夹。例如:人员A将被模拟,并且能够访问人员B

知道密码错误并且使用模拟(现在)是错误的

这是你怎么做的

        ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        //CREDENTIALS OF AN ACCOUNT WHICH HAS READ ACCESS TO THE CALENDAR YOU NEED
        _service.Credentials = new WebCredentials(username, password);
        _service.Url = new Uri(serviceURL);

        SearchFilter.SearchFilterCollection searchFilter = new SearchFilter.SearchFilterCollection();
        searchFilter.Add(new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, DateTime.Now.AddDays(-1)));
        searchFilter.Add(new SearchFilter.IsLessThanOrEqualTo(AppointmentSchema.Start, DateTime.Now.AddDays(2)));
        ItemView view = new ItemView(50);
        view.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.AppointmentType, AppointmentSchema.End);

        //THIS NEXT LINE!!!
        var calendarSearch = new FolderId(WellKnownFolderName.Calendar, new Mailbox("email@ofsomemailbox.com"));
        var appointments = _service.FindItems(calendarSearch, searchFilter, view);

您是直接使用EWS还是通过EWS托管API使用它?@Alfred Myers我使用EWS托管APIAPI@Alfred迈尔斯和@user457261:你没有写任何评论。我写的信息是你需要的吗?谢谢你的回答,但我正在寻找一种不必知道每个密码的方法。就像使用可以访问所有帐户的超级用户一样。@Luke:我回答的最后几句话描述了如何做到这一点。作为“超级管理员”,您可以仅通过SMTP地址模拟任何用户,而不需要任何有关其密码的信息。再看一次。这里的任何人看到我的答案,你不需要冒充,也不需要知道密码。@Preston:首先,我的答案是4年前写的。EWS当时没有任何
网络必要信息。当时EWS管理的API是1.1版(或1.2版),而不是现在的2.2版
WebCredentials
是从EWS管理的API 2.0开始引入的。第二,如果你写了一些错误的东西,你应该非常小心:“使用模仿是错误的”。即使您可以找到访问EWS管理的API 1.1的其他用户凭据的替代方法,模拟的方法仍然是正确的。这是当时微软推荐的唯一一种认识我的方法。这是一个更好的答案,正是我一直在寻找的