获取独特的电子邮件EWS托管Web API

时间:2014-11-27 09:50:41

标签: c# ews-managed-api

我正在尝试使用以下代码从Exchange服务器检索电子邮件:

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();

我需要在我的数据库中保存主题和正文。但我需要独特的电子邮件,因为我不想在我的系统上显示多余的电子邮件。

意味着每当我将我的系统与交换服务器同步时,我都会收到我尚未同步的新电子邮件。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以将EWS获取的电子邮件保存在数据库中。 之后您再次收到电子邮件,以便获得已有的电子邮件和新电子邮件?

如何使用时间戳? 获取MailItem的CreationTime(或ReceivedTime)并将其保存在数据库中。

在EWS中搜索之后,仅搜索比数据库中最后一个CreationTime(或ReceivedTime)晚的CreationTime(或ReceivedTime)的邮件项目。 所以你只收到新的电子邮件。

答案 1 :(得分:0)

一种可能的解决方案是通过调用

将您处理的电子邮件移动到DeletedItems文件夹
emailMessage.Delete(DeleteMode.MoveToDeletedItems);

请注意,我无需在收件箱中保留已处理电子邮件的副本,因此这对我来说是一个可行的解决方案。如果由于某种原因,您必须在收件箱文件夹中保留一份副本,这对您不起作用。