使用EWS托管API在一次通话中获取未读电子邮件并标记为已读

时间:2015-02-23 12:41:44

标签: exchangewebservices ews-managed-api

我有一个标准例程,可以从邮件服务器获取未读电子邮件,将其标记为已读,然后进行处理。它看起来与此相似:

var view = new ItemView(1);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
var findResults = ExchangeService.FindItems(WellKnownFolderName.Inbox, sf, view);

if (findResults.Items.Any())
{
    EmailMessage emailMsg = findResults.Items.First() as EmailMessage;
    emailMsg.IsRead = true;
    emailMsg.Update(ConflictResolutionMode.AutoResolve);

    ProcessMail(emailMsg);
}

这可以从各种进程中调用,因此我需要确保"找到未读/标记的原子性"操作。换句话说,在Service.FindItems()mail.Update()之间,同一封电子邮件可能会被不同的流程读取两次,从而导致重复处理。

现在,我不想参与有关存储已处理电子邮件ID的讨论,或者我是否应该使用多个进程访问同一个电子邮件服务器。

我想知道的是,是否有一个EWS API方法可以在一次调用中执行这两项操作?理想情况下,这将是这样的:

var mail = ExchangeService.GetFirstUnreadEmailAndMarkItAsRead()

1 个答案:

答案 0 :(得分:1)

不,没有。 EWS GetItems调用不会修改项目。

相关问题