获取唯一的电子邮件 EWS 托管 Web API

本文关键字:托管 Web API EWS 电子邮件 唯一 获取 | 更新日期: 2023-09-27 18:32:08

我正在尝试使用以下代码从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();

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

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

获取唯一的电子邮件 EWS 托管 Web API

如果我理解正确,您将 EWS 获得的电子邮件保存在数据库中。稍后您再次收到电子邮件,因此您会收到已有的电子邮件以及新电子邮件?

使用时间戳怎么样?同时获取邮件项的创建时间(或接收时间),并将其保存在数据库中。

之后,仅在 EWS 中搜索 CreationTime(或 ReceivedTime)

晚于数据库中最后一个 CreationTime(或 ReceivedTime)的邮件项目。因此,您只会收到新电子邮件。

一种可能的解决方案是通过调用将您处理的电子邮件移动到"已删除邮件"文件夹

emailMessage.Delete(DeleteMode.MoveToDeletedItems);

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