exchangewebservices - 使用 EWS Managed API 在一次调用中获取未读电子邮件并将其标记为已读

标签 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()

最佳答案

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

关于exchangewebservices - 使用 EWS Managed API 在一次调用中获取未读电子邮件并将其标记为已读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28674058/

相关文章:

office365 - 将从 Office 365 REST API 返回的日历 ID 映射到 EWS API 返回的日历 ID

c# - Azure 网络作业 : C# - The Autodiscover service couldn't be located error

c# - 使用 EWS 托管 API 创建文件夹或打开它(如果存在)

exchangewebservices - 带有 EWS API 的 SAML

office365 - 通过 EWS 通过移动关联消息

node.js - 要求 ssl 为真时无法调用 EWS

ssl - 通过 o365 的 EWS 是否改变了它处理 SSLv3 连接的方式?

exchangewebservices - 如何使用 EWS 托管 api v1.1 删除联系人 CompleteName.Title?

.net - EWS 设置 EmailMessage.Body.Text 错误

c# - 在没有模拟的情况下以其他用户身份在 Exchange 服务器日历上创建约会 (EWS)