标签: ews-managed-api

如何检测C#中是否存在此字典密钥?

我正在使用Exchange Web服务托管API和联系人数据.我有以下代码,它是功能性的,但并不理想:

foreach (Contact c in contactList)
{
    string openItemUrl = "https://" + service.Url.Host + "/owa/" + c.WebClientReadFormQueryString;

    row = table.NewRow();
    row["FileAs"] = c.FileAs;
    row["GivenName"] = c.GivenName;
    row["Surname"] = c.Surname;
    row["CompanyName"] = c.CompanyName;
    row["Link"] = openItemUrl;

    //home address
    try { row["HomeStreet"] = c.PhysicalAddresses[PhysicalAddressKey.Home].Street.ToString(); }
    catch (Exception e) { }
    try { row["HomeCity"] = c.PhysicalAddresses[PhysicalAddressKey.Home].City.ToString(); }
    catch (Exception e) { }
    try { row["HomeState"] = c.PhysicalAddresses[PhysicalAddressKey.Home].State.ToString(); }
    catch (Exception e) { }
    try { row["HomeZip"] = c.PhysicalAddresses[PhysicalAddressKey.Home].PostalCode.ToString(); }
    catch …
Run Code Online (Sandbox Code Playgroud)

c# exchangewebservices ews-managed-api

452
推荐指数
4
解决办法
44万
查看次数

当我尝试通过EWS托管API读取/更新任务的.Body时出错 - "您必须先加载或分配此属性,然后才能读取其值."

我正在使用Exchange Web服务托管API来处理任务(Exchange 2007 SP1).我可以创造它们.但是,当我尝试进行更新时,它适用于除.Body字段之外的所有字段.每当我尝试访问(读取/更新)该字段时,它都会出现以下错误:

"You must load or assign this property before you can read its value."
Run Code Online (Sandbox Code Playgroud)

我使用的代码如下所示:

   //impersonate the person whose tasks you want to read
   Me.Impersonate(userName); //home-made function to handle impersonation

   //build the search filter
   Exchange.SearchFilter.SearchFilterCollection filter = New Exchange.SearchFilter.SearchFilterCollection();
   filter.Add(New Exchange.SearchFilter.IsEqualTo(Exchange.TaskSchema.Categories, "Sales"));

   //do the search
   EWS.Task exTask = esb.FindItems(Exchange.WellKnownFolderName.Tasks, filter, New Exchange.ItemView(Integer.MaxValue));

   exTask.Subject = txtSubject.Text;  //this works fine
   exTask.Body = txtBody.Text; //This one gives the error implying that the object isn't loaded
Run Code Online (Sandbox Code Playgroud)

奇怪的是,检查属性包显示该对象包含33个属性,但{Body}不是其中之一.该属性似乎是从基类.Item或其他东西继承而来的.

那么,我是否需要将对象重新加载为类型Item?或者通过.Bind或其他东西重装?请记住,我需要使用数千个项目来完成此操作,因此效率对我来说很重要.

exchange-server exchangewebservices ews-managed-api

34
推荐指数
3
解决办法
3万
查看次数

尝试使用EWS MANAGED API访问Exchange 2010帐户时,无法找到"自动发现服务"

我正在使用自动发现服务Url来获取指定的电子邮件地址.

ExchangeService Service = new ExchangeService(ExchangeVersion.Exchange2010);
Service.Credentials = new WebCredentials("username@domainname.com", "Password");
Service.AutodiscoverUrl("username@domainname.com");
Folder inbox = Folder.Bind(Service, WellKnownFolderName.Inbox);
Console.WriteLine("The folder name is" + inbox.DisplayName.ToString());
Run Code Online (Sandbox Code Playgroud)

如果我喜欢这样,我会犯一个错误:

无法找到自动发现服务

我必须做些什么来避免这个错误?

c# exchange-server exchangewebservices ews-managed-api

31
推荐指数
7
解决办法
6万
查看次数

使用EWS API将邮件保存到msg文件

我正在使用Exchange Web服务托管API 1.1连接到Exchange Server 2010,然后找到收到的新电子邮件.现在我想将.msg文件的副本保存到磁盘上的文件夹中.

我不想使用任何付费第三方进行整合.

任何帮助将不胜感激.

exchange-server ews-managed-api

30
推荐指数
2
解决办法
3万
查看次数

使用Exchange Web服务API提取Exchange 2007公共日历约会

我们在Exchange 2007公用文件夹中设置了公司的公共日历.我可以使用下面的代码检索当天的个人日历约会.我在网上搜索了高低,我找不到有人从公共文件夹日历中检索日历信息的例子.

它似乎应该是可行的,但我不能为我的生活让它工作.如何修改以下代码以访问日历?我对通过asp.net创建任何约会不感兴趣,只是检索一个简单的列表.我也对任何其他建议持开放态度.谢谢.

ADDED BOUNTY
- 我不可能是唯一需要这样做的人.让我们为后代解决这个问题.

由于无知而再次更新
- 我没有提到我正在研究的项目是.NET 2.0(你觉得非常重要吗?).

*将我的代码解决方案BELOW*
-我已经取代了我原来的代码示例与该结束了工作的代码.非常感谢奥列格提供的代码,以查找公用文件夹,这是最难的部分.我已经从这里修改使用示例代码http://msexchangeteam.com/archive/2009/04/21/451126.aspx使用更简单的FindAppointments方法.

这个简单的示例返回带约会的html字符串,但您可以将其用作基础来根据需要进行自定义.您可以在下面的答案中看到我们的来回.

using System;
using Microsoft.Exchange.WebServices.Data;
using System.Net;

namespace ExchangePublicFolders
{
    public class Program
    {
        public static FolderId FindPublicFolder(ExchangeService myService, FolderId baseFolderId,
        string folderName)
        {

        FolderView folderView = new FolderView(10, 0);
        folderView.OffsetBasePoint = OffsetBasePoint.Beginning;
        folderView.PropertySet = new PropertySet(FolderSchema.DisplayName, FolderSchema.Id);

        FindFoldersResults folderResults;
        do
        {
            folderResults = myService.FindFolders(baseFolderId, folderView);

            foreach (Folder folder in folderResults)
                if (String.Compare(folder.DisplayName, folderName, StringComparison.OrdinalIgnoreCase) == 0)
                    return folder.Id;

            if (folderResults.NextPageOffset.HasValue)
                folderView.Offset = folderResults.NextPageOffset.Value;
        } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net web-services exchange-server-2007 ews-managed-api

25
推荐指数
1
解决办法
1万
查看次数

将Office365 REST日历ID映射到EWS CalendarItem ID

使用Exchange 推送通知我一直在创建一个同步来自Office365用户的日历数据的服务.我一直在使用Office365 Calendar REST API(用于获取和管理日历)和EWS API(用于订阅日历更改)的组合.

我注意到最近MS已经为他们的订阅端点引入了预览API.但是,此API仍处于预览模式,我希望暂时不使用它.

一旦我完成了所有设置,问题是我无法在日历事件资源(REST)和推送通知上返回的EWS CalendarItem资源之间建立关联.在ItemId为CalendarItem和Id对REST事件不同.

当尝试更新我从REST API保存的事件时,这证明是有问题的,因为我找不到将两者关联起来的好方法.

任何帮助是极大的赞赏!

编辑 在进一步挖掘之后,我实际上发现从REST API(GET /calendars)返回的日历似乎是MessageEWS层次结构中的项目.因此,不是此端点返回实际的文件夹ID,而是返回属于某个名为"公共视图"的文件夹中的项ID.

我不确定为什么事情是这样设计的,但base64编码ID的差异似乎非常小.我仍然无法弄清楚将两者联系起来的好方法.

exchangewebservices ews-managed-api office365

18
推荐指数
1
解决办法
719
查看次数

EWS托管API查找具有ItemID的项目

我正在尝试从已删除的项目文件夹中找到项目唯一ID

ItemId id = new ItemId("zTK6edxaI9sb6AAAQKqWHAAA");
SearchFilter.IsEqualTo filter = new SearchFilter.IsEqualTo(ItemSchema.Id, id);
ItemView view = new ItemView(10);
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Subject);
FindItemsResults<Item> results = _ExchangeService.FindItems(WellKnownFolderName.DeletedItems, filter, view);
Console.WriteLine(results.TotalCount);
Run Code Online (Sandbox Code Playgroud)

此代码返回一个异常说:

Validation failed.
Parameter name: searchFilter
Run Code Online (Sandbox Code Playgroud)

如果我搜索带有Subject的邮件,则相同的代码可以使用.

c# exchange-server ews-managed-api

16
推荐指数
2
解决办法
1万
查看次数

我怎样才能知道预约是否是私人的

我使用Exchange Server托管API.如何确定预约是否私密?"约会"课程中似乎没有方法或属性.

c# exchange-server exchangewebservices ews-managed-api

15
推荐指数
1
解决办法
4099
查看次数

Exchange FindItem使用一组商品ID和多个商品ID的不同属性集进行响应

当我通过ExchangeService.LoadPropertiesForItems方法加载多个交换项的属性时,Exchange会跳过响应中的项附件的一些属性:

<t:CalendarItem>
  <t:ItemId Id="itemId" ChangeKey="itemChangeKey"/>
  <t:Subject>Test appointment</t:Subject>
  <t:Attachments>
    <t:FileAttachment>
      <t:AttachmentId Id="firstAttachmentId"/>
      <t:Name>pdf.pdf</t:Name>
      <t:Size>94150</t:Size>
      <t:LastModifiedTime>2015-08-03T10:54:40</t:LastModifiedTime>
      <t:IsInline>false</t:IsInline>
      <t:IsContactPhoto>false</t:IsContactPhoto>
    </t:FileAttachment>
    <t:FileAttachment>
      <t:AttachmentId Id="secondAttachmentId"/>
      <t:Name>ATT89202</t:Name>
      <t:Size>3803738</t:Size>
      <t:LastModifiedTime>2015-12-03T16:40:46</t:LastModifiedTime>
      <t:IsInline>true</t:IsInline>
    </t:FileAttachment>
  </t:Attachments>
</t:CalendarItem>
Run Code Online (Sandbox Code Playgroud)

如您所见,上面的回复不包括ContentId属性.但是,当我使用类的Load方法Item来加载单个项的属性时,EWS Managed API生成GetItem具有单个项ID 的相同SOAP请求,并使用扩展的附件属性集响应Exchange:

<t:CalendarItem>
  <t:ItemId Id="itemId" ChangeKey="itemChangeKey"/>
  <t:Subject>Test appointment</t:Subject>
  <t:Attachments>
    <t:FileAttachment>
      <t:AttachmentId Id="firstAttachmentId"/>
      <t:Name>pdf.pdf</t:Name>
      <t:ContentId>25F20E449DEC42B67EB3DE58C51E56E3BE0B27F5@1</t:ContentId>
      <t:Size>94150</t:Size>
      <t:LastModifiedTime>2015-08-03T10:54:40</t:LastModifiedTime>
      <t:IsInline>false</t:IsInline>
      <t:IsContactPhoto>false</t:IsContactPhoto>
    </t:FileAttachment>
    <t:FileAttachment>
      <t:AttachmentId Id="secondAttachmentId"/>
      <t:Name>ATT89202</t:Name>
      <t:ContentId>DB969CA378C5F9565E98779626E3BCA3A65FB275@1</t:ContentId>
      <t:Size>3803738</t:Size>
      <t:LastModifiedTime>2015-12-03T16:40:46</t:LastModifiedTime>
      <t:IsInline>true</t:IsInline>
    </t:FileAttachment>
  </t:Attachments>
</t:CalendarItem>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在第二个响应ContentId属性中呈现了此外,当我使用ExchangeService.LoadPropertiesForItems方法时,将单个项目作为第一个参数传递,Exchange也将Attachment.ContentId属性包含在响应中.

有没有办法我可以获得ContentId项目附件的属性而不分别为所有项目加载属性?

.net c# exchangewebservices ews-managed-api

12
推荐指数
1
解决办法
467
查看次数

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

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

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

c# exchange-server web-services exchangewebservices ews-managed-api

11
推荐指数
2
解决办法
9629
查看次数