获取唯一的电子邮件 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 获得的电子邮件保存在数据库中。稍后您再次收到电子邮件,因此您会收到已有的电子邮件以及新电子邮件?
使用时间戳怎么样?同时获取邮件项的创建时间(或接收时间),并将其保存在数据库中。
之后,仅在 EWS 中搜索 CreationTime(或 ReceivedTime)晚于数据库中最后一个 CreationTime(或 ReceivedTime)的邮件项目。因此,您只会收到新电子邮件。
一种可能的解决方案是通过调用将您处理的电子邮件移动到"已删除邮件"文件夹
emailMessage.Delete(DeleteMode.MoveToDeletedItems);
请注意,我不必在收件箱中保留已处理电子邮件的副本,因此这对我来说是一个可行的解决方案。如果您出于某种原因必须在收件箱文件夹中保留副本,这将对您不起作用。