我正在尝试使用以下代码从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();
我需要在我的数据库中保存主题和正文。但我需要独特的电子邮件,因为我不想在我的系统上显示多余的电子邮件。
意味着每当我将我的系统与交换服务器同步时,我都会收到我尚未同步的新电子邮件。
答案 0 :(得分:1)
如果我理解正确,您可以将EWS获取的电子邮件保存在数据库中。 之后您再次收到电子邮件,以便获得已有的电子邮件和新电子邮件?
如何使用时间戳? 获取MailItem的CreationTime(或ReceivedTime)并将其保存在数据库中。
在EWS中搜索之后,仅搜索比数据库中最后一个CreationTime(或ReceivedTime)晚的CreationTime(或ReceivedTime)的邮件项目。 所以你只收到新的电子邮件。
答案 1 :(得分:0)
一种可能的解决方案是通过调用
将您处理的电子邮件移动到DeletedItems文件夹emailMessage.Delete(DeleteMode.MoveToDeletedItems);
请注意,我无需在收件箱中保留已处理电子邮件的副本,因此这对我来说是一个可行的解决方案。如果由于某种原因,您必须在收件箱文件夹中保留一份副本,这对您不起作用。