我有一个标准例程,从邮件服务器获取一封未读邮件,将其标记为已读,然后进行处理。它看起来类似于:
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/