Tag: exchangewebservices

在Exchange Web服务(EWS)中处理事件时标识项类型

我正在使用EWS API的流式传输通知。 在事件处理程序中,我发现项目已被修改的事实,但我尝试将修改后的项目绑定到电子邮件消息失败。 错误消息是具体的 服务返回的项类型(约会)与请求的项类型(EmailMessage)不兼容。 在尝试绑定它之前,似乎必须有一种方法来识别项目类型,但我不确定那是什么。 尝试Bind时发生错误,因此我不能简单地检查null。 我可以try/catch ,但如果有更好的方法,我更愿意这样做吗? 汇总代码: void streamingConnection_OnNotificationEvent(object sender, NotificationEventArgs args) { foreach (NotificationEvent notificationEvent in args.Events) { ItemEvent itemEvent = notificationEvent as ItemEvent; if (itemEvent != null) HandleItemEvent(itemEvent); } } private void HandleItemEvent(ItemEvent itemEvent) { switch (itemEvent.EventType) { case EventType.Modified: EmailMessage modifiedMessage = EmailMessage.Bind(this.ExchangeService, itemEvent.ItemId); // error occurs on Bind […]

EWS:Exchange Web服务。 多次调用ResolveName – Perfomance Hit(当然)

您好Stackoverflow社区, 我通过EWS从一个Outlook帐户加载所有Exchange Outlook联系人。 不幸的是,当联系人的电子邮件地址在我们自己的Active Directory中时,它会被转换为不同的格式(/ o = …; ou = …; cn = …)。 要将其转换为常规电子邮件地址,我使用的是EWS-Service对象的ResolveName方法。 现在问题是:我循环遍历FindItems结果的所有项目,将返回的数据映射到我自己的C#类。 在这个循环中,我必须调用ResolveName-Method,它总是导致对EWS的调用。 说到几个联系人,这需要一些时间。 我已经缓存了以前解决过的地址。 但是,当然,第一次通话时会有这种性能受到打击。 问题显然是:有没有办法减少这个名称 – 解决电子邮件的问题? 提前致谢! 我在循环内部的调用: EmailAddress email; if (contact.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1, out email)) { person.Email = GetResolvedEmailAddress(email.Address, svc); } GetResolvedName-Method(用于缓存): private static Dictionary ResolvedEmailAddressCache = new Dictionary(); private static String GetResolvedEmailAddress(string address, ExchangeService svc) { if (ResolvedEmailAddressCache.ContainsKey(address)) […]

通过EWS和C#访问没有邮箱的资源日历

我们的Exchange管理员(Exchange 2010 SP1)已设置共享资源日历。 没有为此资源日历分配邮箱 。 我希望能够使用EWS和C#阅读会议。 片段: ExchangeService esvc = new ExchangeService(ExchangeVersion.Exchange2010); esvc.Credentials = new WebCredentials(username, password, “ourplace.org”); esvc.Url = new Uri(“https://OWA.OURPLACE.ORG/EWS/Exchange.asmx”); FolderId shareFolderId = new FolderId(WellKnownFolderName.Calendar, “Shared Calendar Name”); CalendarFolder.Bind(esvc, shareFolderId); bind语句抛出错误:“SMTP地址没有与之关联的邮箱。” 如何阅读共享资源日历中没有关联邮箱的项目……或者甚至可能? 谢谢 !!

使用EWS查找收件箱文件夹的所有子文件夹

我有以下收件箱文件夹结构: Inbox –ABC —-ABC 2 —-ABC 3 –XYZ —-XYZ 2 –123 —-123 A —-123 B —-123 C 我使用Exchange Web服务和以下代码来查找收件箱文件夹的子文件夹: ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010); service.AutodiscoverUrl(“MyName@MyDomain.com”); Mailbox mb = new Mailbox(“MyName@MyDomain.com”); FindFoldersResults findResults = service.FindFolders( WellKnownFolderName.Inbox, new FolderView(int.MaxValue)); foreach (Folder folder in findResults.Folders) { Console.WriteLine(folder.DisplayName); } 这部分有效,因为它返回ABC,XYZ和123文件夹; 不幸的是,它没有返回每个文件夹内的文件夹(ABC 2,ABC 3,XYZ 2,123 A,123 B,123 C)。 此外,文件夹可能在其中包含多个子文件夹级别。 如何编写此代码,以便它将返回所有子文件夹,无论它们的嵌套程度如何?

EWS 401 Unauthorized – 但仅限在目标服务器上的服务下运行时

我在C#中编写了一个Windows服务,使用EWS自动轮询交换邮箱。 在我的开发机器上,它通过VPN连接到交换服务器网络,它完美地工作。 在目标服务器上,EWS正在返回Request failed. The remote server returned an error: (401) Unauthorized.(The remote server returned an error: (401) Unauthorized.) Request failed. The remote server returned an error: (401) Unauthorized.(The remote server returned an error: (401) Unauthorized.) 在同一台服务器上,我可以使用与提供给服务相同的凭据通过浏览器连接到EWS URL。 凭证在app.config文件中提供,我已经三次检查它们在目标服务器上是否与我的开发机器相同。 可能是什么导致了这个?

UseDefaultCredentials与Exchange Web服务

我是一个非常新的程序员。 我工作的任务之一是获取我们的自定义工具来创建草稿电子邮件并将其放入运行该工具的用户的草稿电子邮件文件夹中。 我们目前使用Exchange Server 2010(但正在迁移到Exchange Online)。 这个链接谈到了UseDefaultCredentials,但我似乎无法弄清楚如何实现它。 我创建了一个名为service的ExchangeService对象,并设法与我们的Exchange服务器交互,使用它来获取凭据: service.Credentials =新的WebCredentials(“我的登录名”,“我的密码”); 我希望能够从代码中消除它并让它使用正在使用该工具的登录用户的凭据。 那可能吗?

Exchange Web服务 – 从服务收到的响应不包含有效的XML

我正在尝试连接到Exchange 2010服务器上的交换Web服务(ews)。 这是我正在使用的代码: using System; using System.Collections.Generic; using System.Text; using Microsoft.Exchange.WebServices.Data; namespace NDR_Processor { class Program { static void Main(string[] args) { ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); service.Credentials = new System.Net.NetworkCredential(“redacted”, “redacted”, “redacted”); service.Url = new Uri(“https://exchange.redacted.net/EWS/Exchange.asmx”); System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; FindItemsResults findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(1000)); foreach (Item item in findResults.Items) […]

是否可以使用c#中的Exchange Web服务分配角色?

是否可以使用c#中的Exchange Web服务分配角色? 像您一样以编程方式自动添加角色ApplicationImpersonation并将角色分配给Office 365 Exchange中的用户?

如何使用Exchange Web Services 2010托管API获取文件夹大小?

我正在尝试使用EWS 2010托管API来获取用户邮箱的总大小。 我还没有找到一个Web服务方法来获取这些数据,所以我想我会尝试计算它。 我在另一个网站上找到了一个关于使用EWS 2007查找邮箱大小的看似适用的问题,但要么我不理解它要求我做什么,要么该方法不适用于EWS 2010。 在代码洞察中,我能够编写我认为是一种递归遍历文件夹结构并导致收件箱内所有文件夹的总计的方法: private int traverseChildFoldersForSize(Folder f) { int folderSizeSum = 0; if (f.ChildFolderCount > 0) { foreach (Folder c in f.FindFolders(new FolderView(10000))) { folderSizeSum += traverseChildFoldersForSize(c); } } folderSizeSum += (int)f.ManagedFolderInformation.FolderSize; return folderSizeSum; } (假设给定文件夹中的文件夹不超过10,000个。这是一个安全的赌注…) 不幸的是,这不起作用。 我正在用这段代码启动递归: Folder root = Folder.Bind(svc, WellKnownFolderName.Inbox); int totalSize = traverseChildFoldersForSize(root); 但抛出了Null引用exception,主要是说[folder].ManagedFolderInformation是一个空对象引用。 为清楚起见,我还试图获得根文件夹的大小: Console.Write(root.ManagedFolderInformation.FolderSize.ToString()); 其中引发了相同的NREexception,所以我知道一旦你到达目录树中的某个深度,ManagedFolderInformation就不存在了。 […]

EWS API – 创建日历并与审阅者权限共享

我在使用Exchange Webservice API .NET创建和共享具有审阅权限的日历时遇到了一些麻烦。 目前这是我的代码: Folder addCalendar = new Folder(service); addCalendar.DisplayName = name; addCalendar.FolderClass = “IPF.Appointment”; var perm = new FolderPermission(new UserId(“reviewer@test.com”), FolderPermissionLevel.Reviewer); addCalendar.Permissions.Add(perm); addCalendar.Save(WellKnownFolderName.MsgFolderRoot); 日历已创建,在我的帐户中,我可以看到日历,用户’reviewer@test.com’具有正确的权限。 问题是: 日历不会显示在审阅者的帐户中。