【问题标题】:Get unread email and mark as read in one call using EWS Managed API使用 EWS 托管 API 在一次调用中获取未读电子邮件并标记为已读
【发布时间】:2015-02-23 12:41:44
【问题描述】:

我有一个标准例程来从邮件服务器获取未读电子邮件,将其标记为已读,然后对其进行处理。它看起来像这样:

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

【问题讨论】:

  • 你有想过这个吗?试图确定同样的事情。
  • 我也面临同样的问题。有什么更新/想法吗?

标签: exchangewebservices ews-managed-api


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 2016-05-14
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2016-07-30
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多