是否可以访问除登录用户之外的其他Exchange帐户的文件夹和项目?Exchange Web Services托管API:访问其他用户项目
我可以通过Exchange Web服务托管API执行此操作吗?
是否可以访问除登录用户之外的其他Exchange帐户的文件夹和项目?Exchange Web Services托管API:访问其他用户项目
我可以通过Exchange Web服务托管API执行此操作吗?
是的,这是可能的,但你应该知道其他用户的密码或以某种方式获取此凭据(NetworkCredential
对象)。您典型的第一行代码可能是
ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1);
myService.Credentials = new NetworkCredential ("[email protected]", "[email protected]");
因此您可以使用其他当前用户的帐户访问Exchange Server Web服务。有关更多信息,请参阅ExchangeService object说明。
如果您是管理员,您可以让用户impersonation by SMTP address。
@Alfred Myers&@ user457261:您没有发表任何评论。我写的信息是你需要的吗? – Oleg 2010-10-03 22:40:37
感谢您的回答,但我一直在寻找一种方式,而不必知道每一个密码。就像使用可以访问所有帐户的超级用户一样。 – Luke 2010-10-08 11:53:32
@Luke:我的答案中的最后一句话描述了如何做到这一点。作为“superadmin”,您只能通过SMTP地址模拟任何用户,而无需提供有关其密码的任何信息。再次查看http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx。 – Oleg 2010-10-08 18:54:09
我建议为每个用户使用模拟而不是登录。 通过模拟,您可以模拟用户。它与完全访问不一样。完全访问是表现的,模仿是充当的。
模拟之前是你有一个用户名和密码,而不是有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 protected]"));
var appointments = _service.FindItems(calendarSearch, searchFilter, view);
这是一个更好的答案,正是我一直在寻找这么长时间 – Nacht 2015-07-03 01:57:08
您是直接使用EWS还是通过EWS Managed API使用它? – 2010-09-24 16:22:02
@Alfred Myers我使用EWS托管API – Luke 2010-09-27 08:01:18