【问题标题】:Exchange Web Services Managed API: Accessing other users itemsExchange Web 服务托管 API:访问其他用户项目
【发布时间】:2011-04-16 18:30:13
【问题描述】:

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

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

【问题讨论】:

  • 您是直接使用 EWS 还是通过 EWS 托管 API 使用它?
  • @Alfred Myers 我使用 EWS 托管 API

标签: c# web-services exchange-server exchangewebservices ews-managed-api


【解决方案1】:

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

ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1);
myService.Credentials = new NetworkCredential ("user@mycorp.local", "P@ssword00");

因此您可以使用当前用户的其他帐户访问 Exchange Server Web 服务。有关详细信息,请参阅ExchangeService object 描述。

如果您是管理员,您可以将用户设为impersonation by SMTP address

【讨论】:

  • @Alfred Myers & @user457261:你没有写任何评论。我写的信息是你需要的吗?
  • 感谢您的回答,但我正在寻找一种无需知道每个密码的方法。就像使用可以访问所有帐户的超级用户一样。
  • @Luke:我回答的最后几句话描述了如何做到这一点。作为“超级管理员”,您可以仅通过 SMTP 地址模拟任何用户,而无需了解有关其密码的任何信息。再看一次msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx
  • 这里的任何人都可以看到我的答案,您不需要冒充,也不需要知道密码。
  • @Preston:首先我的答案是 4 年前写的。 EWS 当时没有任何 WebCredentials 当时 EWS 托管 API 是 1.1(或 1.2)版本,而不是像现在这样的 2.2。 WebCredentials 是从 EWS 托管 API 2.0 开始引入的。秒如果你写错了,你应该非常小心:“使用模拟是错误的”。即使您会找到替代方式来访问 EWS 托管 API 1.1 的其他用户凭据,模拟方式仍然是正确。这是当时微软推荐的唯一了解我的方式。
【解决方案2】:

知道密码是错误的并且使用模拟(这些天)是错误的。

这就是你的做法。

        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);

【讨论】:

  • 这是一个更好的答案,正是我一直在寻找的答案
【解决方案3】:

我建议对每个用户使用模拟而不是登录。 通过模拟,您可以模拟用户。它不像完全访问一样。完全访问权限是行为,模仿是行为。

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

您可以像这样使用模拟:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多