如果我有日历约会,如何获取联系人的itemID?

时间:2015-03-12 08:36:14

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

我们如何在预约中显示所需和可选参加者的照片?根据文档,应该可以使用此方法(MSDN):

来检索照片
private static void GetContactPhoto(ExchangeService service, string ItemId)
{
   // Bind to an existing contact by using the ItemId passed into this function.
   Contact contact = Contact.Bind(service, ItemId);
   // Load the contact to get access to the collection of attachments.
   contact.Load(new PropertySet(ContactSchema.Attachments));
   // Loop through the attachments looking for a contact photo.
   foreach (Attachment attachment in contact.Attachments)
   {
      if ((attachment as FileAttachment).IsContactPhoto)
      {
         // Load the attachment to access the content.
         attachment.Load();
      }
   }
   FileAttachment photo = contact.GetContactPictureAttachment();
   // Create a file stream and save the contact photo to your computer.
   using (FileStream file = new FileStream(photo.Name, FileMode.Create, System.IO.FileAccess.Write))
   {
      photo.Load(file);
   }
}

但是在加载约会对象时,RequiredAttendees和OptionalAttendees数组只返回EmailAdress对象。如何将EmailAdress转换为ItemId,以便可以使用文档中的GetContactsPhoto方法?

//Print out to se what we get.
            foreach (Microsoft.Exchange.WebServices.Data.Appointment a in appointments)
            {
                a.Load(_customPropertySet);

                //Required, Optional, Resource

                // Check responses from required attendees.
                for (int i = 0; i < a.RequiredAttendees.Count; i++)
                {
                    Console.WriteLine("Required attendee - " + a.RequiredAttendees[i].Address);
                }

customPropertySet如下所示:

//Configure so that the body of an appointment is readable.
            PropertySet _customPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, 
                AppointmentSchema.MyResponseType, 
                AppointmentSchema.IsMeeting, 
                AppointmentSchema.ICalUid, 
                AppointmentSchema.RequiredAttendees, 
                AppointmentSchema.OptionalAttendees, 
                AppointmentSchema.Resources);

尝试将电子邮件地址作为Id传递,但会返回错误消息,指出“ID格式错误”。

更新1:尝试使用Jason Johnson在答案中指出的Resolve方法。他正确地指出,我可以在测试后看到它只是我邮箱中的联系人才得到解决。这不是我们需要的,我们需要Exchange或AD中的用户图片。

2 个答案:

答案 0 :(得分:1)

您的代码使用的联系人是个人联系人(存储在用户邮箱中的“联系人”文件夹中的联系人)。我指出这一点是因为只有用户实际拥有联系人的与会者才能使用此方法。话虽这么说,您应该可以使用ResolveNames将电子邮件地址解析为联系人ID。

对于属于用户Exchange组织的与会者,您需要从AD或Exchange本身获取照片信息。请参阅https://msdn.microsoft.com/EN-US/library/office/jj190905(v=exchg.150).aspx

答案 1 :(得分:0)

如果您使用的是Exchange 2013或Office 365,则可以使用FindPeople API通过收件人的电子邮件地址获取联系人。