2014-11-27 6 views
0

Я пытаюсь получить электронную почту с сервера Exchange, используя ниже код:Получение уникальных писем EWS Managed Web API

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

     service.Credentials = new WebCredentials("username", "somepassword"); 

     service.TraceEnabled = true; 
     service.TraceFlags = TraceFlags.All; 

     service.AutodiscoverUrl("username", RedirectionUrlValidationCallback); 


     FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 
     ServiceResponseCollection<GetItemResponse> items = 
      service.BindToItems(findResults.Select(item => item.Id), new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.From, EmailMessageSchema.ToRecipients)); 
     return items.Select(item => 
     { 
      return new MailItem() 
      { 
       From = ((Microsoft.Exchange.WebServices.Data.EmailAddress)item.Item[EmailMessageSchema.From]).Address, 
       Recipients = ((Microsoft.Exchange.WebServices.Data.EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray(), 
       Subject = item.Item.Subject, 
       Body = item.Item.Body.ToString(), 
      }; 
     }).ToArray(); 

Мне нужно, чтобы сохранить тему и тело в моей базе данных. Но мне нужны уникальные электронные письма, потому что я не хочу, чтобы избыточные электронные письма отображались в моей системе.

Значит каждый раз, когда я синхронизирую свою систему с сервером обмена, я получаю новые письма, которые я еще не синхронизировал.

ответ

1

Если вы правильно поняли, вы сохраняете электронные письма, полученные EWS в базе данных. Позже вы снова получите электронные письма, и вы получите письмо, которое у вас уже есть, и новые?

Как насчет работы со временными метками? Получите также CreationTime (или ReceivedTime) MailItem и сохраните его в базе данных.

После этого поиска в EWS только для mailitems, у которых есть CreationTime (или ReceivedTime) позже последнего CreationTime (или ReceivedTime) в вашей базе данных. Итак, вы получаете только новые письма.

+0

Да Мне нужно сохранить электронные письма в моей базе данных .... Есть ли способ, как уникальный идентификатор сообщения электронной почты, из которого я могу отличить одно письмо от другого –

+0

Возможно, это поможет: http://stackoverflow.com/questions/22960203/how-to-get-the-item-id-of-a-mail-item-in-exchange-2010 – Ephedra

0

Возможное решение перенести электронные письма, которые вы перерабатываемые в папку DeletedItems по телефону

emailMessage.Delete(DeleteMode.MoveToDeletedItems); 

Пожалуйста, обратите внимание, что я не должен держать копию обработанных писем в мой почтовый ящик, так что было жизнеспособным решением для меня. Если вам по какой-то причине необходимо сохранить копию в папке «Входящие», это не сработает для вас.

+0

Здравствуйте, мне нужно сохранить электронные письма в папке «Ящик», не хочу их удалять. –

 Смежные вопросы

  • Нет связанных вопросов^_^